gpt4 book ai didi

c# - 任务 ContinueWith() 不更新 UI 线程上的光标

转载 作者:太空狗 更新时间:2023-10-29 22:12:26 26 4
gpt4 key购买 nike

我正在开发一个 WPF 应用程序,我只想在任务运行前后更改光标。我有这段代码:

this.Cursor = Cursors.Wait;

Task.Factory.StartNew(() => PerformMigration(legacyTrackerIds)).ContinueWith(_ => this.Cursor = Cursors.Arrow);

光标确实变为等待光标,但任务完成后它并没有变回箭头。如果我在 ContinueWith() 方法中放置一个断点,它就会被命中。但光标不会变回箭头。为什么?

这是我尝试过的旧方法。光标变回箭头,但我不想为任务等待 ()。

this.Cursor = Cursors.Wait;

Task.Factory.StartNew(() => PerformMigration(legacyTrackerIds)).Wait();

this.Cursor = Cursors.Arrow;

最佳答案

光标更改需要在 UI 线程上完成。您可以使用 overload of ContinueWith需要一个任务调度程序:

var uiScheduler = TaskScheduler.FromCurrentSynchronizationContext(); 

Task.Factory
.StartNew(() => PerformMigration(legacyTrackerIds))
.ContinueWith(_ => this.Cursor = Cursors.Arrow, uiScheduler);

或者使用 Dispatcher.Invoke方法:

Task.Factory
.StartNew(() => PerformMigration(legacyTrackerIds))
.ContinueWith(_ => { Dispatcher.Invoke(() => { this.Cursor = Cursors.Arrow; }); });

关于c# - 任务 ContinueWith() 不更新 UI 线程上的光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12217139/

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