none
线程的问题 RRS feed

  • 问题

  • 有一个 VB .NET 程序,拥有一个窗体,窗体右上角有关闭按钮“X”,窗体上有一个“退出”按钮(单击该按钮后执行 Application.Exit())
    这个程序控制着多个线程同时工作,这些线程通过正确的 invoke 修改着一个 listbox 控件。

    单击“退出”按钮后,程序正常退出;所有线程似乎是正常关闭了。
    但是,单击右上角的关闭按钮“X”后,程序有时能正常退出,有时报错(已知是 listbox 控件被释放后,线程无法正常访问 listbox)。

    但为什么会这样?单击“退出”按钮能使程序正常关闭,线程关闭;单击右上角的关闭按钮“X”后好像无法正常关闭线程。

    请问怎么解决?我是初学的,技术不好。
    Radon
    2009年7月3日 14:52

答案

  • 你好!
         你试试在窗体的Closing事件的处理程序中加上这行代码:
         Application.Exit();
        
         点“X”调用窗体的Close方法销毁窗体,而这时很有可能线程还没有结束,还需要访问窗体的控件,这样会导致问题!
         而Application.Exit()方法可以停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。
    周雪峰
    2009年7月4日 11:12
    版主
  • 有一个 VB .NET 程序,拥有一个窗体,窗体右上角有关闭按钮“X”,窗体上有一个“退出”按钮(单击该按钮后执行 Application.Exit())
    这个程序控制着多个线程同时工作,这些线程通过正确的 invoke 修改着一个 listbox 控件。

    单击“退出”按钮后,程序正常退出;所有线程似乎是正常关闭了。
    但是,单击右上角的关闭按钮“X”后,程序有时能正常退出,有时报错(已知是 listbox 控件被释放后,线程无法正常访问 listbox)。

    但为什么会这样?单击“退出”按钮能使程序正常关闭,线程关闭;单击右上角的关闭按钮“X”后好像无法正常关闭线程。

    请问怎么解决?我是初学的,技术不好。
    Radon

    您尝试下  用 
    System.Diagnostics.Process.GetCurrentProcess().Kill ()
     结束自己的进程
    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    2009年7月5日 3:32
  • 你无法确定线程什么时候访问,你可以用try catch 捕获异常,然后根据境况处理
    http://feiyun0112.cnblogs.com/
    2009年7月5日 10:07
    版主

全部回复

  • 你好!
         你试试在窗体的Closing事件的处理程序中加上这行代码:
         Application.Exit();
        
         点“X”调用窗体的Close方法销毁窗体,而这时很有可能线程还没有结束,还需要访问窗体的控件,这样会导致问题!
         而Application.Exit()方法可以停止在所有线程上运行的所有消息循环,并关闭应用程序的所有窗口。
    周雪峰
    2009年7月4日 11:12
    版主
  • 有一个 VB .NET 程序,拥有一个窗体,窗体右上角有关闭按钮“X”,窗体上有一个“退出”按钮(单击该按钮后执行 Application.Exit())
    这个程序控制着多个线程同时工作,这些线程通过正确的 invoke 修改着一个 listbox 控件。

    单击“退出”按钮后,程序正常退出;所有线程似乎是正常关闭了。
    但是,单击右上角的关闭按钮“X”后,程序有时能正常退出,有时报错(已知是 listbox 控件被释放后,线程无法正常访问 listbox)。

    但为什么会这样?单击“退出”按钮能使程序正常关闭,线程关闭;单击右上角的关闭按钮“X”后好像无法正常关闭线程。

    请问怎么解决?我是初学的,技术不好。
    Radon

    您尝试下  用 
    System.Diagnostics.Process.GetCurrentProcess().Kill ()
     结束自己的进程
    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    2009年7月5日 3:32
  • 谢谢,刚才我试过了,但仍然有时报错。还有其他的解决方法吗?
    Radon
    2009年7月5日 4:32
  • 您好,能有一个比较温和的方法吗?感觉结束进程有些太粗暴了:)
    Radon
    2009年7月5日 4:34
  • 您好,能有一个比较温和的方法吗?感觉结束进程有些太粗暴了:)
    Radon

    呵呵 那就得保留所有的 THREAD引用  挨个的停止
    紫柔版主的头像真叫萌得一个不行啊。。。。
    答案800 撒花
    2009年7月5日 7:11
  • 你无法确定线程什么时候访问,你可以用try catch 捕获异常,然后根据境况处理
    http://feiyun0112.cnblogs.com/
    2009年7月5日 10:07
    版主