在IDisposable类中取消异步

时间:2016-11-10 10:08:42

标签: c# wpf asynchronous idisposable

在我的项目中,我使用管理器来控制插件。主要思想是这个插件必须只能在multythreads WPF应用程序中的单个线程中工作。 PluginController中只有一个插件实例。

所以当我调用Start方法时:它会停止插件(如果正在运行)并使用新参数启动它。很少有第二个插件通知调用者它的状态,ViewModel在WPF窗口中显示它。

当我一个接一个地调用方法启动时,我看到前一个ViewModel实例没有被销毁,但是只能在Stop之后休眠。并且它将Update方法称为上帝作为新的一个实例。所以我的界面因为两个实例正在更新它的状态。在日志中交替看到第一个和第二个的行。

但是当我调用Start(...)然后Stop()然后再启动(...)时,一切正常。

所以

ReportViewer

可以处理错误。和

SomeManager.Start(...);
SomeManager.Start(...);

工作正常。任何人都能解释我的错误吗?

Down lied简化代码。

SomeManager.Start(...);
SomeManager.Stop();
SomeManager.Start(...);

更新:我认为简单的问题是:如果在正常情况下使用CancellationTokenSource.Cancel()正确取消IDisposable对象中的异步操作,并且在调用Dispose()或Finalizer的情况下正常取消

0 个答案:

没有答案