任务.运行引发事件的方法

本文关键字:方法 事件 运行 任务 | 更新日期: 2023-09-27 18:07:47

在用WPF和C#编写的Windows应用商店应用程序中,我需要启动一个从文件中收集信息的异步方法。 但我希望它在后台运行,而 UI 响应用户交互。 所以,我这样做了:

Task x = Task.Run(async () => await Method());

问题是,"方法"必须向 UI 引发更改通知。 如您所料,它崩溃了,因为引发事件的方法不在 UI 线程中。

所以,我这样做了:

TaskScheduler t = TaskScheduler.FromCurrentSynchronisationContext();
Task x = Task.Run(() => {}).ContinueWith(async _ => await Method(), t);

我的问题是,由于我必须指定同步上下文,并且无法在 Run 方法中指定它,因此有没有办法执行以下操作:

TaskScheduler t = TaskScheduler.FromCurrentSynchronisationContext();
Task x = Task.ContinueWith(async _ => await Method(), t);

或者,如果您有其他建议使其工作,欢迎。

谢谢。

任务.运行引发事件的方法

您根本不需要启动新Task。您可以简单地await Method(),而无需在消耗ThreadPool thrrad的Task上使用ContinueWith。当您await异步方法时,它将同步运行,直到到达第一个await并返回到调用方法,这将使您的 UI 保持响应

你可以简单地

await Method();