读书人

请教一个关于多线程的有关问题

发布时间: 2012-01-06 22:55:18 作者: rapoo

请问一个关于多线程的问题
我自定义了一个类A

public class A
{
public string pp = "sfaf ";

Thread _thread;

public event EventHandler OnChanged = null;

private void Do()
{
while (true)
{
StateChanged();

Thread.Sleep(1000);
}
}

public void Start()
{
StateChanged();

_thread = new Thread(new System.Threading.ThreadStart(Do));
_thread.Start();
}

public void Stop()
{
StateChanged();

if (_thread != null)
_thread.Abort();
}
}

其中使用了事件委托,我在窗体Form里面 这样操作:
private void button2_Click(object sender, EventArgs e)
{
k = new A();
k.OnChanged += new EventHandler(tt);
k.Start();

}

void tt(object obj, EventArgs ea)
{
button1.Text = k.pp;


}

程序运行到提示子线程的StateChanged();时就会提示“线程间操作无效: 从不是创建控件“button1”的线程访问它。” 请问怎么解决多线程之间的事件操作问题?

[解决办法]
可以实现楼主想要的效果。

在你的Class A中的构造函数中,加一个参数,如:
private Form mobjForm;
public A(Form owner)
{
mobjForm=owner;
}

然后Do方法中这样写:
void Do()
{
while(true)
{
mobjForm.Invoke(OnChanged,new object[]{this,EventArgs.Empty});
Sleep(1000);
}
}

这样每次有StateChange事件后,在事件中直接调用主线程控件,而不必每次再用Invoke

读书人网 >C#

热点推荐