[size=16px]我要在richtextbox空间里显示程序运行的日志信息,
问题是:我的日志信息也显示了,但是不同步,所说的不同步是当我所有的方法都执行完了以后它是统一显示的,我想让它及时的显示,例如:A类里有个A1方法程序运行到方法的第一句代码是几点几分调用了这个方法,马上让这个信息在窗体的richtextbox空间里显示,方法运行到最后一行也是几点几分这个方法结束,也要马山在空间里显示。[/size]
问题是:我的日志信息也显示了,但是不同步,所说的不同步是当我所有的方法都执行完了以后它是统一显示的,我想让它及时的显示,例如:A类里有个A1方法程序运行到方法的第一句代码是几点几分调用了这个方法,马上让这个信息在窗体的richtextbox空间里显示,方法运行到最后一行也是几点几分这个方法结束,也要马山在空间里显示。[/size]
解决方案 »
- |ZYC| 没写过WINFORM,线程提示:线程间操作无效: 从不是创建控件“lstUser”的线程访问它。 谢谢
- winform如何调用VS2005编辑器显示代码的API?
- 我的vs.net2003是中文版的,现在要用它打开一个有日文注释的项目,该怎么调整vs的设定呢?
- 怎样才能使读文本文件到数据库的速度快啊~~~
- 用C#调用下CAD打开文件的,貌似比较简单
- 进度条的使用
- 咨询一下!正式做开发的时候,数据库连接之类的都不许用控件吗?
- 请问C#里面有静态类吗?它和抽象类和一般类有什么区别?
- 请问.NET类库像MFC一样开放源码么???
- 如何给自定义的类赋值?具体问题称呼请看代码
- 还是关于excel操作的问题
- 【求助】大批量图片显示问题
public delegate void AddText(string txt);
private void button3_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(Add));
t.Start();
} private void Add()
{
int j = 100;
while (j > 0)
{
AddRichText(j.ToString()+ "\r\n");
j--;
Thread.Sleep(1000);
}
Thread.CurrentThread.Abort();
} private void AddRichText(string txt)
{
if (!richTextBox1.IsDisposed)
{
if (richTextBox1.InvokeRequired)
{
AddText at = new AddText(AddRichText);
richTextBox1.Invoke(at, txt);
}
else
{
richTextBox1.AppendText(txt);
richTextBox1.ScrollToCaret();
}
}
}
if(e.Progress == 1)
{
//....
}
......
多线程
public void Write(string info)
{ outputRunTimeInfo = info;
EventHandler eh = new EventHandler(WriteLine);
this.Invoke(eh, new object[2] { null, null });
}
private void WriteLine(object sender,EventArgs e)
{
richTextBox_ShowInfo.Select(richTextBox_ShowInfo.Text.Length, outputRunTimeInfo.Length);
richTextBox_ShowInfo.SelectionColor = SystemColors.WindowText;
richTextBox_ShowInfo.Text += outputRunTimeInfo;
richTextBox_ShowInfo.Text += "\n";
}
//按钮的事件
private void btnStrat_Click(object sender, EventArgs e)
{
this.allMethod();
} //程序入口
private void allMethod()
{
string str = "程序开始运行时间是:" + DateTime.Now.ToString();
this.rtxtRizhi.AppendText(str + "\n"); //调用方法会返回一个字符串
rizhiMethod = new S().C();
this.GetRichText(rizhiMethod, "调用了出货指示生成: new S().C()方法;");
} // 在窗体上显示日志的信息
public void GetRichText(string str,string methodName)
{
this.rtxtRizhi.AppendText(DateTime.Now.ToString() + methodName + "\n");
string[] text = str.Split(//得到一个分隔符); //改变显示操作行数的颜色
rtxtRizhi.SelectionBullet = true;
rtxtRizhi.SelectionFont = new Font("隶书", 12, System.Drawing.FontStyle.Regular);
rtxtRizhi.SelectionColor = Color.Blue;
rtxtRizhi.AppendText(text[0] + "\n"); //改变显示异常信息的颜色
rtxtRizhi.SelectionFont = new Font("隶书", 12, System.Drawing.FontStyle.Underline);
rtxtRizhi.SelectionColor = Color.Red;
rtxtRizhi.AppendText(text[1] + "\n"); //让滚动条显示在最下端
this.rtxtRizhi.ScrollToCaret();
} // 类里其中一个方法,
public string C()
{
log.Warn("调用了什么什么方法"); //程序走到这里也要在窗体的richtextbox里显示,调用了什么方法 //存储异常信息
string str = "";
int a = 0;
try
{
//正常的操作
}
catch (Exception e)
{
//存储异常信息
} //操作了多少条数据
string readly = "";
if (a != 0)
{
//记录此方法的日志信息
log.Error(str);
} // 程序运行到这里不管有没有异常都要在床体里及时的显示
return readly;
}