一个普通的C#编写的Winfrom应用程序。关闭程序后,在任务管理器中始终还是由一个刚才运行的进程存在。迷惑不解使用了很多方法。。如:Application.Exit();System.Environment.Exit(System.Environment.ExitCode);this.Dispose();
Application.ExitThread();等都不能让应用程序在关闭,让进程结束...这是为什么?

解决方案 »

  1.   

    如果你程序中含有线程,该线程的引用最好放到class内都能访问,当你关闭form时候,把这个线程同时也结束掉。你试试看^_^
      

  2.   

    我什么都没有做呀主界面加载事件里我也没有打开了一个Usb设备,关闭程序的时候,我也关闭了对应的usb设备,子界面中的确开了一个线程,可是,我还没有进入那个有线程界面去开始工作。都会存在这个问题甚至,我把打开和关闭usb设备的代码都注释掉。。也存在这个问题。。所以非常不解
      

  3.   

    你不用vs调试,直接运行你debug文件中的exe文件,看看这个exe进程会不会去掉?
      

  4.   

    你是不用了多线程,当你结束程序的时候要保证所有的线程要退出,
    你可以这样if(thd.isAlive)thd.abort()
    这样就不会再有多余的线程了
    OK?
      

  5.   

    进程无法结束,说明有独立的线程在工作,不要怀疑,肯定是有,至于为什么会工作而不停止,得见了代码才知道。一般我们都会用BeginInvoke方法来创建多线程,好处是,系统管理线程的结束,一旦你退出程序,那个线程一定会销毁让你及时退出,如果你自己创建一个线程,并Start()启动线程,那除非线程自己结束或者你收到终止线程,否则你占着进程不让你正常结束进程的。
      

  6.   

    遇到过这个问题,是线程导致的。
    设置这个Thread.IsBackground属性,主进程关闭的时候会一同关闭子进程。或者自己手动控制你的子进程
      

  7.   

    5楼说的这种,我试过isBackGround =true ,这样还是不能关闭任务列表中的进程。为什么我的程序名称为:Bunchprogram.exe,但是在进程中看的话确实 Bunchprogram.vshost.exe不用调试模式。就运行它的EXE文件。。发现这两个都会存在。。关闭后软件后。。Bunchprogram.exe没有了。但是Bunchprogram.vshost.exe依然存在。代码debug调试模式,只有Bunchprogram.vshost.exe,一直无限存在
      

  8.   

    你说的意思。我知道。。但是。我为了测试,都还没有去创建那个线程,线程也没有Start。怎么会出现这个问题
      

  9.   

    你说的是Bunchprogram.exe 还是 Bunchprogram.vshost.exe
    如果Bunchprogram.vshost.exe那么你把vs关了,他就没有了,扩展名都告诉你了,是vshost
      

  10.   


    这个到的确有我调用了一个系统自带的serialPort串口控件,但是,这都是其他子窗口里面的事情呀。。主界面上,我只有一个菜单而已,没有其他的任何控件
      

  11.   

    你调用了一个方法? serialPort.ReadLine()?
      

  12.   

    捕捉在窗体事件Form_Closing()退出时判断 Thread t1.IsLive==true  t1.Abort();//注意对象的null值判断,否则会异常if(t1!=null)
    {}
      

  13.   

    怎么关 vshost?手动结束进程?
      

  14.   


    啊原来关VisualStidio就没有那个进程了
    突然间明白这句话的意思。。
    多谢大哥。。这么细腻的问题都被你发现了。。无限膜拜