c#跨线程访问的代码和窗体关闭退出死循环的代码
一:一段跨线程访问,给页面内的控件赋值的代码找了半天没找到,还得找了以前写的程序.
在这记下来吧 . 这是其他程序内可以跨线程访问的代码 .
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();
string cont = SendMail.SendMsg(gridView1);
SendEmail("浏览数据", cont);
/// Thread.Sleep(_duration); //此处线程挂起比如一个小时,睡着了...... 此处要注销掉 要不下边接收不到信号了...所以导致信号机制无用.....
if (exitEvent.WaitOne(_duration)) //waitone 里边加个时间参数 如果没有信号过来,到了时间也会自动进行while循环,很好的满足当前项目的定时执行的需求
{ return; } }
以上用信号事件 顺利的解决窗体关闭,正常退出死循环的问题
c#跨线程访问的代码和窗体关闭退出死循环的代码的更多相关文章
- C# 跨线程访问UI不报错,必须使用Invoke。
代码有时跨线程访问UI,修改按钮Enable属性不报异常.调试发现修改按钮属性的线程是Background,执行不报异常. 在窗体构造中添加 Control.CheckForIllegalCrossT ...
- c#基础,单线程,跨线程访问和线程带参数
using System; using System.Collections.Generic; using System.Threading; using System.Windows.Forms; ...
- InvokeHelper,让跨线程访问/修改主界面控件不再麻烦(转)
http://bbs.csdn.net/topics/390162519 事实上,本文内容很简单且浅显,所以取消前戏,直接开始.. 源代码:在本文最后 这里是一张动画,演示在多线程(无限循环+Thre ...
- winform 跨线程访问问题
一.问题描述 进行winform 开发我们在进行数据交换时避免不了使用多线程或异步方法,这样操作也将避免不了跨线程对控件进行操作(赋值.修改属性). 下面通过一个测试说明一下问题 点击一个按钮异步对t ...
- C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它
C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 using System; ...
- ASP.NET Boilerplate 学习 AspNet Core2 浏览器缓存使用 c#基础,单线程,跨线程访问和线程带参数 wpf 禁用启用webbroswer右键菜单 EF Core 2.0使用MsSql/MySql实现DB First和Code First ASP.NET Core部署到Windows IIS QRCode.js:使用 JavaScript 生成
ASP.NET Boilerplate 学习 1.在http://www.aspnetboilerplate.com/Templates 网站下载ABP模版 2.解压后打开解决方案,解决方案目录: ...
- .NET设计篇08-线程统一取消模型和跨线程访问UI
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂,输出倒逼输入 内容目录 一.线程统一取消模型1.取消令牌2.可以中断的线程1.设计一个中断函数2.创建CancellationTokenSour ...
- .NET设计篇08-线程取消模型和跨线程访问UI
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂,输出倒逼输入 内容目录 一.线程统一取消模型1.取消令牌2.可以中断的线程1.设计一个中断函数2.创建CancellationTokenSour ...
- c#使用MethodInvoker解决跨线程访问控件
功能函数测试集锦(77) C#专区(114) 版权声明:本文为博主原创文章,未经博主允许不得转载. .net 原则上禁止跨线程访问控件,因为这样可能造成错误的发生,有一种方法是禁止编译器对跨线 ...
随机推荐
- Angular CLI: 全局脚本
全局脚本 有的时候,我们需要加载全局脚本,例如 jQuery 脚本库,第三方的控件库等等.比如 jQuery 可以直接加载到 window 对象上,这就需要我们使用 Angular 中的全局脚本来处理 ...
- Oracle监听已经启动了 sqlplus / as sysdba 仍然报 ERROR:ORA-12560
我的Oracle是11g的 system 的密码忘记了, 但是scott的密码我还记得而且能登录 . 想以sqlplus /as sysdba 修改system密码 一直在报 ERROR:ORA-12 ...
- Javascript FormData实例
一.创建一个formData对象实例的方式 1.创建一个空对象 var formData = new FormData();//通过append方法添加数据 1 2.使用已有表单来初始化对象 //表单 ...
- php弹出式登录窗口并获得登录后返回值
一款bootstrap样式结合php制作的弹出式登录窗口,输入用户名和密码后,ajax传参给后台,并获得登录后返回值. hwLayer+ajax弹出登录框 $(function() { $('#for ...
- pgadmin连接 postgresql远程设置
背景:通过yum默认方式将pgsql10安装在centos7, pgsql 的配置文件在:/var/lib/pgsql/10/data. 配置文件:postgresql.conf 和 pg_hba.c ...
- MYSQL1
一:对查询就行优化 避免全表查询 1.首先考虑在where及order by 列上建立索引 2.where子句 LIKE '%abc%' 前置% 引擎放弃使用索引而进行全表扫描 3.wher ...
- python大法好——mysql防注入
MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...
- faiss索引基于数量级和内存限制的选择
它是一个能使开发者快速搜索相似多媒体文件的算法库.而该领域一直是传统的搜索引擎的短板.借助Faiss,Facebook 在十亿级数据集上创建的最邻近搜索(nearest neighbor search ...
- js数值大小判断的错误
1.js中定义一个变量i,判断i的取值在[1,3]中的错误写法 if(1<= i <= 3) 假设js的值为4,浏览器在解析js时会先将1与4比较 ,显然1<= 4,返回结果为1,然 ...
- hbase 存储结构和原理
HBase的表结构 建表时要指定的是:表名.列族 建表语句 create 'user_info', 'base_info', 'ext_info' 意思是新建一个表,名称是user_info,包含两个 ...