2011-05-02 101 views
-1

在Windows上的C++中,我们使用用户定义的消息以表单UI的形式通过PostMessage API更新数据。我们可以在C#中使用PostMessage,但不知道如何在Forms中处理用户定义的消息! 有些人会告诉我使用委托和调用,但当线程调用委托时表单已关闭或尚未创建时,我们遇到问题。我们仍然喜欢PostMessage来通知UI更新数据。 请帮助。,如何将用户消息发布到Windows并进行处理?

+1

我不明白这是什么意思。什么是“用户定义的消息在表单”?如果PostMessage适合你,为什么不简单使用它?为什么你会期望'Invoke'或者'BeginInvoke'能够正确的发送消息给那些还没有被创建或者已经被销毁的东西? 'PostMessage'也不适用于此。 – 2011-05-02 16:35:11

+0

嗨科迪格雷,“用户定义的消息”是指C++中的WM_USER。在C++中,我们定义了像#define WM_UPDATE_TRANSACTION_STATUS WM_USER + 1这样的消息。你误解了,当线程在关闭或未准备好的表单中调用委托时,我们会多次遇到异常。我们认为PostMessage将解决这个问题。 – QuangND 2011-05-02 17:13:15

回答

1

Form有一个方法可以覆盖,WndProc,它将接收您的自定义消息。它以Message结构为参数,封装消息的hwnd,msg,wParam和lParam参数,并包含消息结果的字段。所以假设你有一条注册信息:

class MyForm : Form 
{ 
    const int MyMessage = WM_USER + 0x05; // for example 

    protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == MyMessage) 
     { 
      // do whatever with your message 
     } 
    } 
} 
+0

感谢Matthew Ferreira,如何发送PostMessage中的C#类? – QuangND 2011-05-02 17:14:53

+0

你的意思是一个类的整个对象图,序列化?不要这样做。使用您的自定义消息来指示您的应用程序打开管道(或另一个IPC机制)并以这种方式发送序列化的类。 – 2011-05-02 17:27:08

+0

非常感谢你 – QuangND 2011-05-02 17:36:47

相关问题