我们需要使用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);
}发布于 2012-11-27 18:59:34
您可以将object传递给要发送的委托。
所以这是我要做的:
class DialogResultReference
{
internal DialogResult DialogResult { get; set; }
}
class YourClass
{
static void ShowMessageBox(object dialogResultReference)
{
var drr = (DialogResultReference)dialogResultReference;
drr.DialogResult = MessageBoxEx.Show("Yes or no?", "Continue?", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
}
// ... You just remove dr from the class
SynchronizationContext synchContext;
//in main forms constructor
{
...
synchContext = AsyncOperationManager.SynchronizationContext;
}
void workerThread(object obj, DoWorkEventArgs args)
{
var drr = new DialogResultReference();
sc.Send(YourClass.ShowMessageBox, drr);
}
}https://stackoverflow.com/questions/13260891
复制相似问题