VB .NET 多线程问题

来源:百度知道 编辑:UC知道 时间:2024/09/20 21:49:54
有一个 VB .NET 程序,拥有一个窗体,窗体右上角有关闭按钮“X”,窗体上有一个“退出”按钮(单击该按钮后执行 Application.Exit())
这个程序控制着多个线程同时工作,这些线程通过正确的 invoke 修改着一个 listbox 控件。

窗体的Closing事件的处理程序中有如下代码:
Application.Exit();

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

但为什么会这样?单击“退出”按钮能使程序正常关闭,线程关闭;单击右上角的关闭按钮“X”后好像无法正常关闭线程。
窗体的Closing事件的处理程序中有如下代码:
Application.Exit();

但是,为什么那样之后仍然崩溃?

Application.Exit() 是强制放弃了本进程所有的线程。

而关闭按钮“X”,执行的是 Form_Closing 和 Form_Close 事件,这2个事件是要先尝试释放资源的,不会去强制放弃未完成的线程,就出现了你的问题