今天改程序,有个方法跨线程操作UI,用到委托,按照以前的例子抄了一下,发现代码报错,提示:

A field initializer cannot reference the non-static field, method, or property 'FormAimZero.DMSToMil1()'

代码如下:

private void DMSToMil1()
{
   //...        
}

//委托
public delegate void dlgt();
//调用
dlgt dmsChange = new dlgt(DMSToMil1);

代码完全看不出问题,费解。想了一会儿,找到了原因:

其他没问题,其实是在委托实例化的时候,也就是

dlgt dmsChange = new dlgt(DMSToMil1); 这一句的位置不对,我直接写在了方法的外面。

正确的方法是在委托实例化准备要调用的时候,应该放在某一具体的方法里面才对:

//写在某个方法中
public void dataReceivedSp1()
{
   //...
   dlgt dmsChange = new dlgt(DMSToMil1);
   this.BeginInvoke(dmsChange);             
}

问题解决。