博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#跨线程访问的代码和窗体关闭退出死循环的代码
阅读量:7059 次
发布时间:2019-06-28

本文共 1343 字,大约阅读时间需要 4 分钟。

一:一段跨线程访问,给页面内的控件赋值的代码找了半天没找到,还得找了以前写的程序.

在这记下来吧 .  这是其他程序内可以跨线程访问的代码 .

if (gridControl1.InvokeRequired)                {                    gridControl1.BeginInvoke(new MethodInvoker(delegate                    {                        gridControl1.DataSource = urlmodellist;                    }));                }                else                {                    gridControl1.DataSource = urlmodellist;                }

 

二:这个是关闭创体内的while 循环的bug  ,正常情况下关闭窗体,窗体内有死循环的话,窗体关闭了,程序还在后台运行.

 解决方法:

1:在窗体的FormClosing事件处理方法中,使用代码System.Environment.Exit(0)强制退出当前进程,这样一来,不管进程下是否还有线程在工作,都会一概结束。

private void frmCase2_FormClosing(object sender, FormClosingEventArgs e)

{
System.Environment.Exit(0);

2:还有一个事件结束的方式. 这种方式的话如果下边程序刚开始进行中.程序等到程序运行到waitone才能关闭,比如程序刚起来,就运行了时间长的操作,只能等到这操作技术,运行到waitone 的地方,才能运行..

while (true)            {                Console.WriteLine("do some thing");                BrowerUrls();                Thread.Sleep(1000);                string cont = SendMail.SendMsg(gridView1);                SendEmail("浏览数据", cont);             ///   Thread.Sleep(_duration);  //此处线程挂起比如一个小时,睡着了......  此处要注销掉 要不下边接收不到信号了...所以导致信号机制无用.....
if (exitEvent.WaitOne(_duration))  //waitone 里边加个时间参数  如果没有信号过来,到了时间也会自动进行while循环,很好的满足当前项目的定时执行的需求 {  return; }  }

 

以上用信号事件 顺利的解决窗体关闭,正常退出死循环的问题

转载于:https://www.cnblogs.com/zuochanzi/p/9930240.html

你可能感兴趣的文章
拨开云计算迷雾,助力企业业务创新
查看>>
Venn Diagram Comparison of Boruta, FSelectorRcpp and GLMnet Algorithms
查看>>
静态路由
查看>>
一些错误的想法和错误的感悟
查看>>
ROBOCOPY备份
查看>>
从源码读出不一样的Spring之Spring生态圈
查看>>
JasperReport学习笔记5-其它数据生成动态的报表(WEB)
查看>>
2012第四届中国国际版权博览会
查看>>
对android应用进行单元测试使用单元测试框架
查看>>
Python初学者乱记
查看>>
4005.Cacti监控HP9000小型机HP-UX系统关键性能指标
查看>>
我的友情链接
查看>>
Silverlight中的网站设计
查看>>
mysql数据库最基本的操作
查看>>
信息安全等级保护工作历程
查看>>
文本处理工具之grep
查看>>
python模块学习----nmap模块
查看>>
Table显示滚动条
查看>>
Java基础第三天_数组
查看>>
PHP 中文汉字转换成拼音函数
查看>>