在自定义类中定义事件,在窗体上注册并调用事件处理函数怎么还会出现无法操作控件的问题的啊?

dafish001 2010-01-13 04:51:17
我想实现一个自定义类,其中定义了一个事件。这样在主窗体中只要向类注册这个事件处理函数就可以接收并处理类发出的事件。我的代码是这样的:
public delegate void ReceiveHandler(object sender, MyMessage e);
class CThreadMessage
{
public static event ReceiveHandler receiveEventHandler;
public CThreadMessage()
{

}
public static void TestClickNum()
{
int iClickTemp = 0;

iClickTemp = Program.g_iClickNum;

MyMessage thisMessage = new MyMessage(iClickTemp);



if (iClickTemp % 5 ==0)
{
if (receiveEventHandler != null)
{
receiveEventHandler(null, thisMessage);

}

}
}
}
public class MyMessage : EventArgs
{
public int ClickNum = 0;
public MyMessage(int ClickNum)
{
this.ClickNum = ClickNum;
}
}
然后在主窗体中:
{
public frmThreadMessage2()
{
InitializeComponent();
}

private void frmThreadMessage2_Load(object sender, EventArgs e)
{
CThreadMessage.receiveEventHandler += new ReceiveHandler(MyMessageHandler);
}
private void MyMessageHandler(object sender, MyMessage e)
{
int iClickNum = e.ClickNum;
label1.Text += iClickNum.ToString() + "\r\n"; //执行到这里就出错,不能操作标签控件
}
}
类是静态的,在另一个窗体上通过线程触发的:
private void frmThreadMessage_Load(object sender, EventArgs e)
{
frmThreadMessage2 form2 = new frmThreadMessage2();
form2.Show();
//testMessage.receiveEventHandler += new ReceiveHandler(MyMessageHandler);
CThreadMessage.receiveEventHandler += new ReceiveHandler(MyMessageHandler);
thread = new Thread(new ThreadStart(StartThread));
thread.Start();
}
private void StartThread()
{
while (true)
{
CThreadMessage.TestClickNum();
}
}
难道主窗体自己的事件处理函数是在工作线程中执行的吗???
我想实现的最终效果就是:将类和主程序独立开来,类自身在线程中工作,主窗体程序只需要向其注册主程序自己的事件处理函数即可。类中触发事件后主程序的事件处理函数自动被调用。
...全文
81 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
dafish001 2010-01-13
  • 打赏
  • 举报
回复
晕倒,这只是用来验证的一个模型,真正的代码是需要在一个线程中放置一个自己封装的串口通讯类,让它在线程中不断向18个下位机发指令读数,我想做到的是一旦通讯类读到了数据就发出事件,然后主程序中自动响应这个事件。串口通讯类要维护18个下位机的通讯状态很费时,故只能放在一个工作线程中的。
指间的风 2010-01-13
  • 打赏
  • 举报
回复
直接写个类,然后实例化,调用不就完了。

111,120

社区成员

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

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

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