如何监控多线程执行状态
如题。
我的方法是给线程一个回调方法往一个richtextbox来输出线程状态
但是发现多线程执行的时候,多个线输出信息时非常容易出错。
加一个全局的静态变量做锁的话,程序基本没办法输出信息,死锁状态。
不知应如何处理,请大家指点一二。
回调方法如下:
private static object lockobj;
#region private void OnOutputRunInfo(string Message) //信息输出到控制台
/// <summary>
/// 信息输出到控制台
/// </summary>
/// <param name= "Message "> </param>
private void OnOutputRunInfo(string Message)
{
//lock (lockobj)
//{
// rtbCenter.Text += Message + "\r\n " + rtbCenter.Text;
// rtbCenter.Focus();
// rtbCenter.Select(this.rtbCenter.TextLength, 0);
// rtbCenter.ScrollToCaret();
//}
//rtbCenter.Text += Message;
//rtbCenter.Text += "\r\n ";
//rtbCenter.Select(rtbCenter.Text.Length, 0);
//rtbCenter.ScrollToCaret();
}
#endregion
------解决方案--------------------具体代码才知晓
//这句不好,用AppendText方法好点
rtbCenter.Text += Message + "\r\n " + rtbCenter.Text;
------解决方案--------------------使用backgroundWoker类
------解决方案--------------------这个涉及到多线程之间的数据传输问题了.
用这个函数 this.BeginInvoke ().再用这个函数前,必须先声明一个委托.delegate类型.
1.private delegate void UpdateWatchRichtextDelegate(string newtext);当然名字你自己随便自己取都行.
2.在实现UpdateWatchRichtext(string newtext)//newtext是线程间传输的数据.
{
//比如:这样就可以数据传出来.
txtRichTxt.Text+=newtext;
}
3.在需要把数据传送到RichText时,就调用
this.BeginInvoke(new UpdateRichTextDelegate(UpdateWatchRichtext),string trData)
//strData在这里为传送的数据.
这样就能实现了.
若还不明白给我邮,我有这样程序.
------解决方案--------------------使用一個狀態管理的結構或者類,這樣比較方便管理線程.