1

当插件被卸载并且 OnDisconnection() 方法运行时,我希望插件产生的所有线程都立即终止。更具体地说,如果其中一个线程或主线程创建了一个消息框,我希望在卸载加载项的那一刻销毁消息框。

我现在看到的行为是,当我卸载插件(工具 - > 管理插件)时,线程会继续在后台运行,并且与插件相关的 UI 一直清晰可见,直到用户手动关闭它。

4

2 回答 2

2

首先也是最重要的,

我希望插件产生的所有 thredas 立即终止。

不,你没有。您想要的是其他线程以正常方式停止运行自己。异步异常(例如ThreadAbortException)可能会使应用程序处于不良状态,这与您要完成的任务完全相反。

在不知道你的外接程序有多个线程的具体原因的情况下,我只能提出以下建议:

  • 确保可以通过在加载项中设置标志或调用某种取消回调来取消长时间运行的操作。
  • 避免保持空闲线程运行(当工作完成后,线程的主函数应该返回并且线程将停止运行)。
  • 如果无法停止加载项,可以通知用户下次重新启动 Visual Studio 时将应用更改。该IVsUIShell.ShowMessageBox方法可能是您要用于此通知的方法。
  • 我以前没有使用过它,但 Visual Studio shell 提供的似乎IVsThreadedWaitDialogFactory是为了解决这个领域的一些问题而创建的。
于 2013-03-22T13:28:21.480 回答
1

一些有用 的资源:C#、Visual Studio 2010、如何停止方法、线程?

如何:创建和终止线程

如第一个链接中所列,建议查看BackgroundWorker

于 2013-03-22T13:26:43.837 回答