当前位置: 首页 > wzjs >正文

宁夏建设工程招投标管理中心网站网站收缩目录模板

宁夏建设工程招投标管理中心网站,网站收缩目录模板,个人做流量大的网站,网络营销的特点举例C#winform主线程刷新UI时竟抛异常"从不是创建控件的线程访问它" 1 软件抛出示意图2 使用场景说明2.1 日志刷新模块2.2 查看线程号2.2.1 添加变量法2.2.2 构造函数加载资源方式 3 总结 1 软件抛出示意图 2 使用场景说明 在Form2中添加了richTextBox1,用来…

C#winform主线程刷新UI时竟抛异常"从不是创建控件的线程访问它"

  • 1 软件抛出示意图
  • 2 使用场景说明
    • 2.1 日志刷新模块
    • 2.2 查看线程号
      • 2.2.1 添加变量法
      • 2.2.2 构造函数加载资源方式
  • 3 总结

1 软件抛出示意图

在这里插入图片描述

2 使用场景说明

  1. 在Form2中添加了richTextBox1,用来临时刷新日志信息;
  2. 软件启动主窗体(Form1),并实例化了Form2;
  3. 有一条线程调用了Form2的实例化对象,刷新了richTextBox1信息
  4. 后续在(主线程)使用Form1打开(Show)Form2时,软件提示“System.InvalidOperationException:“线程间操作无效: 从不是创建控件“richTextBox1”的线程访问它。”
  5. 获取了调用时DisplayLog和Form2.Show()的线程号,发现刷新UI时,竟然不在主线程刷新,并且没有报错。

2.1 日志刷新模块

  • 此时我是比较疑惑的,为什么主线程打开Form2时,还会报出这个异常?刷新控件信息时使用了主线程去刷新(如下图),怎么还会出现这个问题?
  • 这不是拿着自己家的钥匙开自己家的门,邻居报警了“这个人是个贼,竟然想偷他自己家的东西!”
    在这里插入图片描述

2.2 查看线程号

public void DisplayLog(string log)
{if (this.InvokeRequired){this.Invoke(new EventHandler(delegate { DisplayLog(log); }));return;}try{LogUtil.Instance.Debug($"Form2.DisplayLog线程号:{Thread.CurrentThread.ManagedThreadId}");richTextBox1.AppendText(log + Environment.NewLine);richTextBox1.ScrollToCaret();}catch (Exception ex){LogUtil.Instance.Error("", ex);}
}Time:2025-04-17 13:40:46,612 
Thread ID:[1] 
Log Level:  DEBUG 
Class:Log4net.Logger.LogUtil property: [(null)] - 
Description:初始化Form2线程号:1 Time:2025-04-17 13:40:47,493 
Thread ID:[4] 
Log Level:  DEBUG 
Class:Log4net.Logger.LogUtil property: [(null)] - 
Description:Form2.DisplayLog线程号:4 Time:2025-04-17 13:40:47,968 
Thread ID:[1] 
Log Level:  DEBUG 
Class:Log4net.Logger.LogUtil property: [(null)] - 
Description:承载Form2线程号:1 
  • 果然线程号是有问题的,虽然我进行了两种处理方式。

2.2.1 添加变量法

随后,我定义了一个bool字段,在窗体的Load事件中将该值设置为true,在刷新日志的方法中判断是否该值的状态,若窗体未调用Load,接受到日志信息则不进行刷新。当Load加载了之后,再去刷新在这里插入图片描述

  • 测试结果,未抛异常
  • 但是按照上面的方法去做,虽然解决了抛出异常的问题,但是,显而易见的是如果未打开Form2,那日志信息就不会记录,当打开Form2时,只能看到Load之后的日志信息,这样肯定是不能接受的。
  • 所以另想他法。

2.2.2 构造函数加载资源方式

  • 在构造函数中调用一次DisplayLog
public Form1()
{InitializeComponent();DisplayLog("模块启动成功");
}public void DisplayLog(string log)
{if (this.InvokeRequired){this.Invoke(new EventHandler(delegate { DisplayLog(log); }));return;}try{richTextBox1.AppendText(log + Environment.NewLine);richTextBox1.ScrollToCaret();}catch (Exception ex){LogUtil.Instance.Error("", ex);}
}

这时测试的时候发现也没有报错,但是缺点是多了一条日志信息,这样我们是能接受。并且UI是在主线程刷新的。


Time:2025-04-17 13:42:43,633 
Thread ID:[1] 
Log Level:  DEBUG 
Class:Log4net.Logger.LogUtil property: [(null)] - 
Description:初始化Form2线程号:1 Time:2025-04-17 13:42:44,203 
Thread ID:[1] 
Log Level:  DEBUG 
Class:Log4net.Logger.LogUtil property: [(null)] - 
Description:Form2.DisplayLog线程号:1 Time:2025-04-17 13:42:45,674 
Thread ID:[1] 
Log Level:  DEBUG 
Class:Log4net.Logger.LogUtil property: [(null)] - 
Description:承载Form2线程号:1 Time:2025-04-17 13:42:46,372 
Thread ID:[1] 
Log Level:  DEBUG 
Class:Log4net.Logger.LogUtil property: [(null)] - 
Description:Form2.DisplayLog线程号:1 

3 总结

无论是处理方式1还是处理方式2,仅解决了抛出异常的问题,但是并未搞清楚第一次界面使用的是子线程,为何软件竟然能够通过,并且主线程刷新UI竟然会异常。

> 希望有懂的大神,可以帮忙解惑下。


文章转载自:

http://3bvWT7AX.pLfrk.cn
http://7nW7qQ1l.pLfrk.cn
http://E6Vl3z8c.pLfrk.cn
http://CqpjwZCm.pLfrk.cn
http://towijWxI.pLfrk.cn
http://ArW4Vftp.pLfrk.cn
http://X0LJX0kq.pLfrk.cn
http://W43YO2fN.pLfrk.cn
http://hQIsuovJ.pLfrk.cn
http://pXX1L7yf.pLfrk.cn
http://KUU0YU3r.pLfrk.cn
http://jPL6reYj.pLfrk.cn
http://VNnQhsAV.pLfrk.cn
http://VMq7hYGq.pLfrk.cn
http://w3MnEWf0.pLfrk.cn
http://8ubN0A06.pLfrk.cn
http://XHpwDAj8.pLfrk.cn
http://0MwLqEvw.pLfrk.cn
http://bFpnRHH7.pLfrk.cn
http://BW6IdNqS.pLfrk.cn
http://UsP0YRqt.pLfrk.cn
http://PbFqwWgO.pLfrk.cn
http://gipi2Jot.pLfrk.cn
http://YyiEWQM8.pLfrk.cn
http://VQr8G5CF.pLfrk.cn
http://ls9kvYWQ.pLfrk.cn
http://1TT6vwcd.pLfrk.cn
http://BebRRv97.pLfrk.cn
http://mmr8iDKz.pLfrk.cn
http://BAzNLbGG.pLfrk.cn
http://www.dtcms.com/wzjs/708940.html

相关文章:

  • 腾讯做的电子商务网站学校网站模板免费
  • 网站ip段屏蔽国家级示范建设网站
  • 怎样利用网站做推广网站解析后显示建设中
  • 货代可以从哪些网站开发客户软件商店应用
  • 网站卡密怎么做广西建设网查询
  • 北京梦创义网站建设本地app制作公司
  • 浙江综合网站建设配件怎么建网站数据库
  • 辽宁省建设厅证书查询网站wordpress添加导航
  • 专业网站建设费用电商网站建设开发的语言有哪些
  • 公司网站怎么申请怎么注册wordpress文章不显示全文
  • 两学一做教育纪实评价系统网站电商购物网站
  • 哪里有学习做网站的专门的网页制作工具有
  • 游戏道具网站开发网站内部流程
  • 网站建实例网页制作创建站点
  • 网站开发的背景是指什么建设银行官方网站购房贷款利率
  • 晚上做设计挣钱的网站青海网站制作
  • 建设留学网站最牛html5网站建设
  • asp.net 登陆两个网站全网营销公司排名前十
  • 公司的网站建设费怎么入账临淄找工作信息网
  • 网站开发项目费用预算网站建设套餐介绍
  • 大型网站建设的主要问题网站上传文件不大于5M定么做
  • 网站后期的维护国外以紫色为背景的网站
  • 网站网页设计是什么商业网站的域名代码
  • 网站开发基础语言关键词优化需要从哪些方面开展?
  • 网站安全建设 应用开发建设一个自己的网站首页
  • 中英语双语网站咋做网站建设就是学淘宝吗
  • 北京网站建设怎么样天宁波江北建设局网站
  • 电商购物网站建设临沂网站建站专业公司
  • 如何修改网站关键词wordpress 发布 接口
  • 汕头网站推广优化微博内网站怎么做的