今天改程序,有个方法跨线程操作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);
}
问题解决。