读书人

怎么监控多线程执行状态

发布时间: 2012-01-29 21:39:32 作者: rapoo

如何监控多线程执行状态
如题。
我的方法是给线程一个回调方法往一个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在这里为传送的数据.
这样就能实现了.

若还不明白给我邮,我有这样程序.

[解决办法]
使用一管理的或者,比方便管理程.


public struct TheadState
{
//....
}

读书人网 >C#

热点推荐