2 qq 29670983 qq_29670983 于 2016.09.26 21:42 提问

请教一个C#线程的问题

我在C#里面创建了一个线程,里面只写了一个MESSAGEBOX.SHOW,运行之后再关闭
发现这个MESSAGEBOX仍然保留在桌面上,请问这是怎么回事呀?我在FORMCLOSING
里面加了关闭线程的语句还是不行
我记得在VC里面像上面这样关闭窗口的话 会连同弹出的MESSAGEBOX一同关闭的

3个回答

caozhy
caozhy   Ds   Rxr 2016.09.26 23:46

MESSAGEBOX.SHOW不能放在线程里,必须用invoke在主线程调用

qq_29670983
qq_29670983 谢谢
大约一年之前 回复
lilove333
lilove333   2016.09.27 11:03

winform的线程区别前台线程和后台线程,默认创建的线程是前台线程,当所有的前台线程关闭后,应用程序域才会被卸载,程序才会正真的退出,所以才会出现你这种情况

qq_29670983
qq_29670983 请问下,前台线程和后台线程有什么区别呢
大约一年之前 回复
qq_29670983
qq_29670983 太厉害了, 谢谢
大约一年之前 回复
z3237109
z3237109   2016.09.27 11:29

不知道你的代码的具体情况,可以试试下面的方案:
1、在你的线程声明的时候,将IsBackground这个属性置为TRUE;
2、如果1方法不好使的话,那就在你的主窗口的关闭事件里面用跨线程调用组件的方式,invoke关闭窗口;
3、第三套就是有点绕的方法了,传递关闭事件,当需要关闭的窗口接收到事件之后,执行关闭代码;
4、第四种是大杀器,如果你的主窗口关闭之后,业务逻辑上是整个程序退出的话,那就用Application.Exit();直接天下太平了。。。。。。。。。

qq_29670983
qq_29670983 太谢谢了,把ISBGROUNG改了之后就能自动 关闭了。
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片