gpt4 book ai didi

c# - 通过在线程库中处理来消除对 Invoke() 的需求

转载 作者:太空狗 更新时间:2023-10-30 00:58:51 26 4
gpt4 key购买 nike

在我正在编写的类库中,我有一个方法允许库在不同的线程上做一些事情,它会做类似的事情:

    public void DoStuffAsync(AP p)
{
this.Running = true;
this.Cancel = false;

ParameterizedThreadStart threadStart = new ParameterizedThreadStart(DoStuff);
Thread procThread = new Thread(threadStart);
procThread.Start(p);
}

我还在接口(interface)上声明了一些开发人员可以 Hook 的事件,例如 StatusUpdate 和 ProgressUpdate。我目前正在编写一个调用 DoStuffAsync() 然后更新进度条和标签的小测试应用程序(目前在 WPF 中,尽管我希望在 WinForms 中有相同的行为)。

不幸的是,第一遍我遇到了一个错误,通常的线程不是拥有控件的线程。我想要做的是消除用户在 UI 端调用 Invoke() 的需要,让他们只需订阅事件并让它们工作。

所以问题是,在处理事件处理程序时,我的代码有没有办法做到这一点?目前像这样触发:

        public void UpdateProgress(object sender, ProgressEventArgs e)
{
if (handler != null)
{
handler(sender, e);
}
}

最佳答案

使用 AsyncOperationManager相反。

它将为您执行调用。(在内部它使用 nobugz 描述的 SynchronizationContext)

关于c# - 通过在线程库中处理来消除对 Invoke() 的需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2117418/

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