终止Visual Studio插件生成的所有线程的正确方法是什么?

本文关键字:线程 方法 是什么 Studio Visual 插件 终止 | 更新日期: 2023-09-27 18:05:23

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

我现在看到的行为是,当我卸载插件(工具->管理插件)线程继续在后台运行,插件相关的UI保持在明显的视线,直到用户手动关闭它。

终止Visual Studio插件生成的所有线程的正确方法是什么?

首先,

我希望插件生成的所有线程都立即终止。

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

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

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

一些有用的资源:c#, visual studio 2010,如何停止一个方法,线程?

如何创建和终止线程

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