今年上半年做项目时遇到了一个问题,就是系统在运行的过程中,点击程序到显示画面,另外一个线程接收到信息需要将画面的局部进行更新。考虑到是跨线程的操作,直接处理的话就会出现错误。因此使用消息的方式来处理,问题得到了解决。现在将示例代码贴出来演示下:
//自定义消息
public const int USER = 0x500;
public const int MYMESSAGE = USER + 1;
///重写窗体的消息处理函数DefWndProc,从中加入自己定义消息 MYMESSAGE 的检测的处理入口
protected override void DefWndProc(ref Message m)
{
switch (m.Msg)
{
//接收自定义消息MYMESSAGE
case MYMESSAGE:
{
lb1.Enabled = true;
lb1.Visible = true;
}
break;
default:
base.DefWndProc(ref m);
break;
}
}
//供其它线程调用的方法
public void CallProcess()
{
//other process
//抛出消息进行跨线程的处理
Win32API.PostMessage(this.Handle, MYMESSAGE, "", "");
}