2010-08-11 58 views
1

我需要將消息發送到GUI線程,下次GUI線程處於空閒狀態時應該處理它。該消息可以來自GUI線程或後臺線程。如何在模態對話框打開的情況下接收通知

我嘗試了MachPort/Notification的組合。但是,當我做了

[[NSNotificationQueue defaultQueue] enqueueNotification: my_notify postingStyle: NSPostASAP]; 

,如果有一個模式對話框這不是布控,我不得不關閉在被處理前的對話,所以這是不可用的我。

在菜單選擇或實時調整大小期間不處理消息是可以的,但模態對話有點過於延遲。

回答

0

簡答:不要使用模態對話框。

長答案:模態對話框由一個稱爲NSModalPanelRunLoopMode的特殊運行循環模式處理,請參見here。 要安排通話,一種方法是使用該文件中解釋的performSelectorOnMainThread:withObject:waitUntilDone:modes:;不要忘記在那裏指定模態模式和默認模式。

您也可以使用NSNotificationCenter並指定運行循環模式,請參閱the discussion here。但是,從線程環境中使用NSNotificationCenter開始,如here所述,因此我不推薦它。可以使用dispatch_async

+0

'performSelectorOnMainThread:withObject:waitUntilDone:'似乎足以向主線程報告模態對話框,儘管文檔沒有明確說明。 – JWWalker 2010-08-12 02:30:00

+0

確實。當不使用'modes:'時,文檔不清楚它運行的模式。無論如何,我討厭模態對話框,所以對我來說無所謂:p – Yuji 2010-08-12 03:46:18

+0

謝謝,是的,我討厭模態對話框,並擺脫了其中大部分(我移植一個Windows/Linux應用程序,所以有很多)。但是,例如NSAlert只能工作模式,我想要一些數據更新工作,即使這加劇了。但是我會問一個關於如何編寫非模態NSAlert的新問題。 – Lothar 2010-08-12 09:14:53

相關問題