C#中跨线程读取控件值、设置控件值
编写应用程序时,涉及到大量数据处理、串口通信、Socket通信等都会用到多线程,多线程中如何跨线程调用主界面或其他界面下的控件是一个问题,利用invoke和delegate可以解决。
delegate其实就是函数的指针,invoke是控件的唤醒函数。
情况一: 函数不需要返回值
//跨线程设置控件comboBox的值 public delegate void commbdelegate(ComboBox cb); public void commb(ComboBox cb) { if (cb.InvokeRequired) { commbdelegate dt = new commbdelegate(commb); cb.Invoke(dt, new object[]{cb}); } else { cb.Text = "test"; } }
情况二:函数需要返回值
//跨线程读取控件ComboBox的值,并返回 public delegate string commbdelegate(ComboBox cb); public string commb(ComboBox cb) { if (cb.InvokeRequired) { commbdelegate dt = new commbdelegate(commb); IAsyncResult ia=cb.BeginInvoke(dt, new object[]{cb}); return (string)cb.EndInvoke(ia); //这里需要利用EndInvoke来获取返回值 } else { return cb.Text; } }
✄-------------✎博主签名------------✄
一个人,只有当他的灵魂真正撼动了、刺痛了,他的智慧才可能被空前的发掘。人一旦变得清醒、理智起来,他就一步步靠近了成熟。