Tag: canceltokensource

如何使用CancellationTokenSource关闭另一个线程上的对话框?

这与我的其他问题如何取消后台打印有关 。 我试图更好地理解CancellationTokenSource模型以及如何跨线程边界使用它。 我有一个主窗口(在UI线程上)后面的代码: public MainWindow() { InitializeComponent(); Loaded += (s, e) => { DataContext = new MainWindowViewModel(); Closing += ((MainWindowViewModel)DataContext).MainWindow_Closing; }; } 它在关闭时正确调用CloseWindow代码: private void CloseWindow(IClosable window) { if (window != null) { windowClosingCTS.Cancel(); window.Close(); } } 通过选择菜单项,在后台线程上创建第二个窗口: // Print Preview public static void PrintPreview(FixedDocument fixeddocument, CancellationToken ct) { // Was cancellation already requested? […]

CancellationTokenSource vs. volatile boolean

在一个易失性布尔字段上使用CancellationTokenSource来表示Task完成是否有任何好处?

CancellationTokenSource与Task循环退出的退出标志之间的区别

我想知道结束循环任务与CancellationTokenSource和退出标志之间是否有任何区别 CancellationTokenSource: CancellationTokenSource cancellationTokenSource; Task loopTask; void StartLoop() { cancellationTokenSource = new CancellationTokenSource(); loopTask = Task.Factory.StartNew(Loop, TaskCreationOptions.LongRunning); } void Loop() { while (true) { if (cancellationTokenSource.IsCancellationRequested) break; Thread.Yield(); } } void StopLoop() { cancellationTokenSource.Cancel(); loopTask = null; cancellationTokenSource = null; } 退出标志: volatile bool exitLoop; Task loopTask; void StartLoop() { exitLoop = false; loopTask = […]