我正在vb.net中创建一个WPF GUI应用程序,该应用程序需要与COM API交互以执行一些处理器密集型工作。最初,我将作品放置在BackgroudWorker中:
worker = New BackgroundWorker()
AddHandler worker.DoWork, AddressOf tsm.SAP_DoWork
AddHandler worker.ProgressChanged, AddressOf tsm.SAP_ProgessChanged
AddHandler worker.RunWorkerCompleted, AddressOf tsm.SAP_Completed
worker.RunWorkerAsync()
tsm对象具有对mainWindow的引用,该引用在ProgressChanged处理程序中已更新。除以下几点外,此方法非常有效:如果用户单击中止按钮,我需要能够立即中止SAP_DoWOrk函数。
现在,根据我对BackgroundWorker合作取消模式的理解,这意味着启用取消功能:
worker.WorkerSupportsCancellation = True
然后在SAP_DoWork函数中检查此标志。问题在于此函数在多个子类中调用了许多单独的处理器密集型函数,并且还具有大量逻辑,我希望线程在取消后立即停止。.现在看来,我有两个选择:
我真的不想做1,所以在VB.NET WPF应用程序中有没有办法做2?我对BackgroundWorker的工作方式有一些基本的误解吗?