我在子线程里用delegate改变窗体上label的显示值,但是就是不会变化。
定义:
public delegate void MyInvoke(string str);
private void SetConnectState(string info)
{
label1.Text = info;
}子线程里调用:
MyInvoke mi = new MyInvoke(SetConnectState);
this.Invoke(mi, new object[] {“abc”});我断点跟踪了一下SetConnectState这个方法确实被调用执行了 但是为什么label的显示值就是不会变化?
定义:
public delegate void MyInvoke(string str);
private void SetConnectState(string info)
{
label1.Text = info;
}子线程里调用:
MyInvoke mi = new MyInvoke(SetConnectState);
this.Invoke(mi, new object[] {“abc”});我断点跟踪了一下SetConnectState这个方法确实被调用执行了 但是为什么label的显示值就是不会变化?
{
this.Invoke(new MyInvokeDelegate(this.ChangeText), o.ToString());
} private void ChangeText(string name)
{
this.textBox2.Text = name;
} 在子程序调用
this.DoSomething(szData);
private void SetConnectState(string info)
{
label1.Text = info;
} private void Do()
{
MyInvoke mi = new MyInvoke(SetConnectState);
this.Invoke(mi, new object[] { "abc" });
} private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(Do));
th.Start();
}上面的代码我试过了,应该可以实现你的要求,你可以试试看
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx