我有一个问题,使用委托从不是主窗体线程的线程更改文本框.
我有两个类,一个带有UI的主Form1.cs类和另一个类,LINClass.cs,我写了一个设备函数.
在Form1中,我启动了一个持续轮询设备的后台工作程序,以及另一个从设备中检索数据的线程(RXTask()),这两个线程的所有功能都来自LINCLass.cs.
从设备检索数据的线程包含一个委托,该委托指向允许更改Form1文本框的Form1.cs函数:
public class LINClass : Form
{
private delegate void FormUpdater(int devnum, string rpm, string current, string temp);
//some other variables and procedure
public void RXTask()
{
FormUpdater frmUpdt = new FormUpdater(Form1.GUIupdate);
//other procedures and a loop containing the invoke...
this.Invoke(frmUpdt, new object[]{devnum, rpm,
current,
temperature});
}
Form1类包含调用的方法,如下所示
public static void GUIupdate(int eWPnum, string rpm, string current, string temp)
{
//take the parameters and write them in the textbox
}
现在当我运行代码时,线程正在运行但是在调用函数时我有一个异常.
http://s13.postimg.org/9ohuj9d7r/exception.png
它说,“InvalidOperationException未被管理,在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke”
最佳答案 您应该使用命令模式并将命令类从一个线程放入队列,并让另一个线程从中读取.