Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么';终止VisualStudio加载项生成的所有线程的正确方法是什么?_C#_Multithreading_Visual Studio_Add In - Fatal编程技术网

C# 什么';终止VisualStudio加载项生成的所有线程的正确方法是什么?

C# 什么';终止VisualStudio加载项生成的所有线程的正确方法是什么?,c#,multithreading,visual-studio,add-in,C#,Multithreading,Visual Studio,Add In,卸载加载项并运行OnDisconnection()方法时,我希望加载项生成的所有threda立即终止。更具体地说,如果其中一个线程或主线程创建了MessageBox,我希望在卸载外接程序时销毁MessageBox 我现在看到的行为是,当我卸载加载项(工具->管理加载项)时,线程会在后台继续运行,而与加载项相关的UI会一直保持在清晰可见的位置,直到用户手动关闭它。一些有用的资源: 如第一个链接所列,建议首先查看 我希望加载项生成的所有thredas立即终止 不,您不需要。您需要的是其他线程停止

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

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

一些有用的资源:

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

我希望加载项生成的所有thredas立即终止

不,您不需要。您需要的是其他线程停止以正常方式运行自己。异步异常(例如
ThreadAbortException
)可能会使应用程序处于错误状态,这与您试图实现的完全相反

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

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