вы можете сделать это следующим образом: Вместо вызова alert.RunModal(), сделайте следующее:
NSApplication.SharedApplication.BeginSheet (alert.Window, this.WindowForSheet);
О том, что второй параметр, вы должны кормить в окне, для которого вы хотите приложить окна предупреждения. В моем случае это было вызвано из NSDocument.
Затем, когда вы закрываете уведомление вы можете сделать это из другого потока с помощью
alert.Window.Close();
NSApplication.SharedApplication.EndSheet (alert.Window);
В моем случае, я показывал предупреждение, когда я загрузить некоторые данные на сервере в отдельном потоке, и затем закройте его, когда закончите (я также скрою кнопку ok, используя некоторые грязные методы). Если вы хотите, чтобы ok buctton был видимым, вам может потребоваться позвонить в эту вторую строку, даже если вы закроете его из кнопки ok предупреждения (вы должны будете сами это проверить)
Обратите внимание, что NSApplication.BeginSheet и EndSheet устарели в 10.10. Apple указывает, что вместо этого вы должны использовать NSWindow.BeginSheet и EndSheet, вызывая его в окне, к которому вы хотите подключить оповещение. Но также обратите внимание, что эти 2 метода доступны только на 10.10, поэтому, если вы также нацеливаете 10.9 (что большинство разработчиков все еще делает), вам придется идти с устаревшей версией на данный момент ... Вот как яблоко обесценивает вещи - они не заботятся об их разработчиках приложений
UPDATE Похоже, что таким образом предупреждение не изменяется автоматически. RunModal и RunSheetModal изменяют размер предупреждения, чтобы содержимое соответствовало. Если вы хотите, чтобы он был немодальным, вам придется вычислить размер, чтобы он каким-то образом соответствовал, используя alert.Window.SetContentSize. Вы можете либо пройти через все подзоны, либо обнаружить поле nstext с помощью alert.MessageText и вычислить размер, чтобы соответствовать этому, и использовать frame.right + 10 для вычисления того, что должно иметь окно предупреждения. Но это не гарантирует работу над будущей версией os x