gpt4 book ai didi

c# - 是否可以使用 synchronizationcontext.send 返回一个值

转载 作者:太空宇宙 更新时间:2023-11-03 16:23:33 33 4
gpt4 key购买 nike

我们需要使用 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);
}

最佳答案

您可以将一个对象传递给传递给发送的委托(delegate)。

所以这是我要做的:

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);
}
}

关于c# - 是否可以使用 synchronizationcontext.send 返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13260891/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com