you can do it like this:
Instead of calling alert.RunModal(), do this:
NSApplication.SharedApplication.BeginSheet (alert.Window, this.WindowForSheet);
About that second parameter, you have to feed in the window for which you want to attach the alert window. In my case this was called from a NSDocument.
Then, when you close the alert you can do it from other thread by
alert.Window.Close ();
NSApplication.SharedApplication.EndSheet (alert.Window);
In my case, I was showing the alert while I was uploading some data on a server on a separate thread, and then close it when finished (I would also hide the ok button using some dirty methods). If you want to have the ok buctton visible, you might need to call that second line even if you close it from the ok button of the alert (you will have to test this yourself)
Note that NSApplication.BeginSheet and EndSheet are deprecated in 10.10. Apple indicates that you have to use NSWindow.BeginSheet and EndSheet instead, by calling it onto the window you want to attach the alert to. But also note that these 2 methods are available only on 10.10, so if you are targeting 10.9 also (which most devs still do), you will have to go with the deprecated version for now... This is how apple deprecates things - they don't really care about their app developers
UPDATE
It seems that in this manner the alert is not resized automatically. RunModal and RunSheetModal do resize the alert to make contents fit. If you want it non-modal you will have to compute the size to fit somehow, using alert.Window.SetContentSize. You can either loop through all subviews and detect the nstextfield with the alert.MessageText and compute the size to fit of that and use frame.right + 10 to compute the with that the alert window should have. But this is not guaranteed to work on future version of os x