大家是如何解决子窗口与线程关闭问题的? 本帖最后由 silent_hacker 于 2009-11-12 20:26:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设置一个static的变量吧,线程没做完一步要进行下一步的时候就查看一下这个变量,决定是否继续下去。总之,c#的线程终止方法很讨厌。我做了一个winform程序,其中一个线程是在Oracle上执行查询,结果总是终止不了,没办法,我只好设置成要是你中断,我就关闭整个程序。 重写子窗口的OnClosed方法,在里面关闭线程。protected override void OnClosed(EventArgs e){ //在这里关闭子窗口线程 base.OnClosed(e);} 子窗体里面用了多少个线程啊?如果不多的话,建议用微软自带的BackgroundWorker,并将它的属性WorkerSupportsCancellation设为true(可取消)。关闭窗口时(建议在FormClosing事件中处理)检查BackgroundWorker是否IsBusy。如果为true,你可以不立即关闭,让用户过段时间再点击关闭(为了更友好,可以让BackgroundWorker报告执行进度到UI界面,这样用户知道什么时候完毕);或者干脆取消BackgroundWorker的执行,如果BackgroundWorker成功取消执行,再关闭窗体。当然,如果BackgroundWorker取消执行未成功,这就像 #1楼 说的线程难终止,你再想想办法吧,呵呵~ 从ABC**到遍历二维数组 CheckedListBox 控件数据绑定 求关于英文单词拼写检查的方法 UI控件,高分求思路(如没有满意答案,进者有分) 搜索出来的一行数据列数太多,有没有办法实现两行或者多行显示? 如何提前datarow在datatable中的位置 OWC编程中怎么把DataSet的数据传给数据透视表(PivotTable) 求助,求助!! 在C#中如何保证传入参数不会被改变? C#写的很简单的一个COM+,这册时如下提示,什么原因???? C# 长string 换行符 委托传参数
总之,c#的线程终止方法很讨厌。我做了一个winform程序,其中一个线程是在Oracle上执行查询,结果总是终止不了,没办法,我只好设置成要是你中断,我就关闭整个程序。
{
//在这里关闭子窗口线程
base.OnClosed(e);
}
如果不多的话,建议用微软自带的BackgroundWorker,并将它的属性WorkerSupportsCancellation设为true(可取消)。
关闭窗口时(建议在FormClosing事件中处理)检查BackgroundWorker是否IsBusy。如果为true,你可以不立即关闭,让用户过段时间再点击关闭(为了更友好,可以让BackgroundWorker报告执行进度到UI界面,这样用户知道什么时候完毕);或者干脆取消BackgroundWorker的执行,如果BackgroundWorker成功取消执行,再关闭窗体。
当然,如果BackgroundWorker取消执行未成功,这就像 #1楼 说的线程难终止,你再想想办法吧,呵呵~