在我的项目中,我使用管理器来控制插件。主要思想是这个插件必须只能在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的情况下正常取消