2011-05-02 40 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

相關問題