我使用以下代码
var UiScheduler = TaskScheduler.FromCurrentSynchronizationContext();
CancellationToken cancellationToken = cancellationTokenSource.Token;
const TaskContinuationOptions continuationOptions = TaskContinuationOptions.OnlyOnRanToCompletion;
Task<string> task = Task<string>.Factory.StartNew(() => getSomeText(), cancellationToken);
task.ContinueWith(t => label.Text = t, cancellationToken, continuationOptions, UiScheduler);
在一些后台任务之后更新 UI。但是,如果在任务完成之前关闭了表单,那么无论如何都会完成更新。是否有一些最佳实践来避免这种情况?当表单已经消失时,一些控件开始出现错误以响应使用它们。我现在检查“Disposing”和“IsDisposed”以避免这种情况,但我不确定这是否是正确的方法以及是否可能存在其他线程问题/竞争条件。感谢您的帮助!