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

时间:2013-03-22 13:12:39

标签: c# multithreading visual-studio add-in

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

我现在看到的行为是,当我卸载插件(工具 - >管理插件)时,线程会继续在后台运行,并且与插件相关的用户界面保持畅通,直到用户手动关闭它。

2 个答案:

答案 0 :(得分:2)

首先,

  

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

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

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

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

答案 1 :(得分:1)

一些有用的资源: C#, visual studio 2010, how to stop a method, threads?

How To: Create and Terminate Threads

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