截取了有关的几行代码:
namespace TPNameSpace
{
    
    
    public partial class TPMain : Form
    {
        double Heading = 0;      //arr[2]
        public delegate void CALLBACKFUNCFK(IntPtr pData, Int32 datalength);
        public static CALLBACKFUNCFK callbackFK = new CALLBACKFUNCFK(CallBackFuncFK);        [DllImport("DataCtrlDll.dll", CharSet = CharSet.Auto, EntryPoint = "SetCallBack_YCFK")] // 设置设备的回调CallingConvention = CallingConvention.Cdecl, 
        public static extern int SetCallBack_YCFK(CALLBACKFUNCFK pCallBackFK);//FGetData pGetYC_FK
        private void button1_OnMouseMove(object sender, EventArgs e)
        {
            label4.text="234";
            int tempres = SetCallBack_YCFK(callbackFK);
        }
        public static void CallBackFuncFK(System.IntPtr pData, Int32 datalength)
        {
            int Heading=3;
                        label4.Text = Heading.ToString();//  此处提示出错,说找不到label4的定义 ,而且,此处的heading和正文中的heading完全两码事,怎么回事?            return;
        }
    }

解决方案 »

  1.   

    委托创建一个新线程,回调函数也属于这个线程,当然不能访问主线程创建的控件(label4)了  代码: [复制到剪贴板]  
    label4.Text = Heading.ToString();改为  代码: [复制到剪贴板]  
    MethodInvoker updateLabel = delegate
    {
         label4.Text = Heading.ToString();
    };
    if (label4.InvokeRequired)
    {
        label4.Invoke(updateLabel);
    }
    else
    {
        updateLabel();
    }可以?
      

  2.   

    //  此处提示出错,说找不到label4的定义 ,而且,此处的heading和正文中的heading完全两码事,怎么回事?这个问题:
    因为CallBackFuncFK函数属于TPMain类
    label4属于TPMain对象
      

  3.   

    你要是不懂就别乱指点。public static void CallBackFuncFK(System.IntPtr pData, Int32 datalength)你这个回调函数是static,所以它当然找不到实例的成员 label4