gpt4 book ai didi

c# - 当操作执行到任务中时,如何通过 UI 线程调用事件处理程序? (C#)

转载 作者:行者123 更新时间:2023-11-30 23:18:40 25 4
gpt4 key购买 nike

当引发代码执行到任务(而非 UI)时,是否存在通过 UI 线程(WinForms)执行事件处理程序的任何方法?

有 **Threading.Timer** 的回调,它的代码总是从 ThreadPool 调用。回调可以引发事件。然而 ThreadPool 也做它的处理程序。我通过 UI 线程订阅事件:

    //UI
(Action<string>) MyEvent += (string result) =>
{ MyInput.Text += String.Format("server: {0}", result); }; //changes GUI

//The timer's callback, not UI:
MyEvent(result); //exception...

最佳答案

您需要告诉您的任务在 UI 线程上继续。由于您从 UI 线程启动任务,因此它将捕获上下文。您可以这样做以告诉它继续捕获的上下文:

// Lets say task is your task that you started so tell it to continue like this
Task UITask= task.ContinueWith(() =>
{
// Do UI update here
}, TaskScheduler.FromCurrentSynchronizationContext());

哦,如果您改为使用 System.Windows.Forms.Timer,那么事件将在 UI 线程上自动触发。

关于c# - 当操作执行到任务中时,如何通过 UI 线程调用事件处理程序? (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733647/

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