2012-12-01 40 views
1

在我使用P/Invoke的C#程序中,我更改了我的窗口的過程地址。 所以我可以對我感興趣的windows消息作出反應。WindowProc何時被調用?

但是什麼時候由系統調用該過程? 我有我在我的自定義過程,並在我的代碼的其餘部分操縱兩個列表。 系統如何決定何時可以或不可以調用過程, 並且有可能會損壞數據?

例如

我將條目添加到我的過程中的列表。

我通讀了列表並處理了我代碼的另一部分中的條目。

在我設法清除列表之前,該過程接管並添加更多條目。

返回到我的代碼的其他部分,列表被清除,新條目將被丟棄而不被處理。

+0

什麼時候沒有關係,你無法控制它,因此你不能依賴它。你的代碼的其他部分應該管理列表中的所有操作。捕獲消息並將其傳遞給列表控制器。 –

+0

爲什麼你可以使用受支持的機制進行黑客攻擊? –

+0

@David我只是重寫WindowProc,所以我可以捕獲消息發送到我的應用程序窗口,以處理用戶輸入(文本和鍵/鼠標)。 –

回答

1

您可能不應該使用p/invoke來執行此操作,因爲它可能會干擾Windows窗體(或WPF)管理消息泵的方式。

如果你一定要,你可以嘗試這些方法: Setting up Hook on Windows messages

或者你可以在你的主窗體類,它不需要進一步解釋重寫的WndProc。

+0

有很多方法可以捕獲Windows消息。我不知道什麼時候發送和處理了Windows消息。我想在發送消息時存儲消息數據,然後在方便我的應用程序時使用它(例如,當它不忙於做其他事情時)。所以我仍然需要知道Windows操作系統何時決定將消息發送到我的應用程序。 –

+0

@BobCoder:應用程序爲消息泵中的消息輪詢窗口。只要當前消息的所有處理都已發生,就會發生這種情況。 – siride

+0

@siride這就是異步消息的情況。同步的以不同的方式交付。 –