我们需要使用 SynchronizationContext 通过 Send 返回一个值(特别是 MessageBox DialogResult)(我们不希望通过“Post”进行异步)。只是不确定语法。我们遇到了 MessageBox 出现在主窗口后面的问题,这被认为是由于无法轻松访问主窗体 IWin32Window 值引起的……我们正在使用它,但老实说我对此感到不舒服。
DialogResult dr;
SynchronizationContext synchContext;
//in main forms constructor
{
...
synchContext = AsyncOperationManager.SynchronizationContext;
}
void workerThread( object obj, DoWorkEventArgs args)
{
// SynchronizationContext passed into worker thread via args
sc.Send( delegate {dr = MessageBoxEx.Show( "Yes or no?", "Continue?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question );},null);
}