C#的回调函数里的变量和正文中变量不同?

yardloun 2012-07-03 10:18:56
截取了有关的几行代码:


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;
}
}
...全文
111 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
SocketUpEx 2012-07-04
  • 打赏
  • 举报
回复
楼上不是说我吧
cheng2005 2012-07-04
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

委托创建一个新线程,回调函数也属于这个线程,当然不能访问主线程创建的控件(label4)了

代码: [复制到剪贴板]
label4.Text = Heading.ToString();

改为

代码: [复制到剪贴板]
MethodInvoker updateLabel = delegate
{
label4.Text = Heading.ToS……
[/Quote]
你要是不懂就别乱指点。

public static void CallBackFuncFK(System.IntPtr pData, Int32 datalength)

你这个回调函数是static,所以它当然找不到实例的成员 label4
SocketUpEx 2012-07-03
  • 打赏
  • 举报
回复
// 此处提示出错,说找不到label4的定义 ,而且,此处的heading和正文中的heading完全两码事,怎么回事?

这个问题:
因为CallBackFuncFK函数属于TPMain类
label4属于TPMain对象
yardloun 2012-07-03
  • 打赏
  • 举报
回复
委托创建一个新线程,回调函数也属于这个线程,当然不能访问主线程创建的控件(label4)了

代码: [复制到剪贴板]
label4.Text = Heading.ToString();

改为

代码: [复制到剪贴板]
MethodInvoker updateLabel = delegate
{
label4.Text = Heading.ToString();
};
if (label4.InvokeRequired)
{
label4.Invoke(updateLabel);
}
else
{
updateLabel();
}

可以?
SocketUpEx 2012-07-03
  • 打赏
  • 举报
回复
所有的
yardloun 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

全部去掉static,试试
[/Quote]

去掉哪些?我这段代码里所有的吗?
SocketUpEx 2012-07-03
  • 打赏
  • 举报
回复
全部去掉static,试试

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧