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

做一名优秀网站设计师计划/简单网页制作成品免费

做一名优秀网站设计师计划,简单网页制作成品免费,wordpress访问优化插件,上海嘉定网站建设公司Windows Phone 7手机开发、.Net培训、期待与您交流! 在多线程学习过程中,碰到了的错误,虽然TextBox.CheckForIllegalCrossThreadCalls false;能关闭检测而跳过这个异常,但总感觉不对劲,既然微软弄出这个东西&#xf…

================ Windows Phone 7手机开发、.Net培训、期待与您交流! ================

 

在多线程学习过程中,碰到了未命名的错误,虽然TextBox.CheckForIllegalCrossThreadCalls = false;能关闭检测而跳过这个异常,但总感觉不对劲,既然微软弄出这个东西,肯定不是简单关闭检查那么简单的事。查了下MSDN,找到解决方法。

 

对 Windows 窗体控件进行线程安全调用
  1. 查询控件的 InvokeRequired 属性。

  2. 如果 InvokeRequired 返回 true,则使用实际调用控件的委托来调用 Invoke。

  3. 如果 InvokeRequired 返回 false,则直接调用控件。

使用 BackgroundWorker 进行线程安全调用

在应用程序中实现多线程的首选方式是使用BackgroundWorker组件。BackgroundWorker 组件使用事件驱动模型实现多线程。后台线程运行 DoWork 事件处理程序,而创建控件的线程运行 ProgressChanged 和 RunWorkerCompleted 事件处理程序。可以从 ProgressChanged 和 RunWorkerCompleted 事件处理程序调用控件。

使用 BackgroundWorker 进行线程安全调用

  1. 创建一个方法,该方法用于执行您希望在后台线程中完成的工作。不要调用由此方法中的主线程创建的控件。

  2. 创建一个方法,用于在后台工作完成后报告结果。可以调用由此方法中的主线程创建的控件。

  3. 将步骤 1 中创建的方法绑定到 BackgroundWorker 的实例的 DoWork 事件,并将步骤 2 中创建的方法绑定到同一实例的 RunWorkerCompleted 事件。

  4. 若要启动后台线程,请调用 BackgroundWorker 实例的 RunWorkerAsync 方法。

示例

下面的代码示例是一个完整的 Windows 窗体应用程序,它包含一个带有三个按钮和一个文本框的窗体。第一个按钮演示不安全的跨线程访问,第二个按钮演示使用 Invoke 实现的安全访问,而第三个按钮演示使用 BackgroundWorker 实现的安全访问。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace 线程练习
{public partial class FormThreadProcsafe : Form{delegate void SetTextCallback(string text);public FormThreadProcsafe(){InitializeComponent();}private void FormThreadProcsafe_Load(object sender, EventArgs e){}/*不安全的跨线程访问*/private void setTextUnsafeBtn_Click(object sender, EventArgs e){Thread demoThread = new Thread(new ThreadStart(ThreadProcUnsafe));demoThread.Start();}private void ThreadProcUnsafe(){this.textBox1.Text = "这是不安全的调用方法.";//抛出异常,demoThread不能直接访问不是自己创建的textBox1
        }/*使用 Invoke 实现的安全访问*/

private void setTextSafeBtn_Click(object sender, EventArgs e){Thread demoThread = new Thread(new ThreadStart(ThreadProcSafe));demoThread.Start();}private void ThreadProcSafe(){this.SetText("这是使用Invoke实现安全的调用方法.");}private void SetText(string text){//检查控件的InvokeRequired是否为true,是则ThreadProcSafe方法会创建SetTextCallback的一个实例,并将该实例传递给窗体的Invoke方法。//这使得SetText方法被创建TextBox控件的线程调用,而且在此线程上下文中将直接设置Text属性if (this.textBox1.InvokeRequired){ SetTextCallback d = new SetTextCallback(SetText);this.Invoke(d, new object[] { text });}else//InvokeRequired为false则直接赋值 {this.textBox1.Text = text;}}/*使用 BackgroundWorker 实现的安全访问(还是不太明白)*/private void setTextBackgroundWorkerBtn_Click(object sender, EventArgs e){this.backgroundWorker1.RunWorkerAsync();}private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){this.textBox1.Text = "使用 BackgroundWorker 实现的安全访问.";}} }

运行界面如下:

 

在运行该应用程序并单击“不安全的跨线程访问”(不安全调用)按钮时,Visual Studio 调试器会指示出现异常。调试器在尝试直接对文本框写入内容的后台线程中的行上停止。在单击“使用 Invoke 实现的安全访问”(安全调用)按钮时,文本框中会显示“这是使用Invoke实现安全的调用方法.”,这指示已调用 Invoke 方法。在单击“使用 BackgroundWorker 实现的安全访问”(安全 BW 调用)按钮时,文本框中会显示“使用 BackgroundWorker 实现的安全访问.”,这指示已调用 BackgroundWorker 的 RunWorkerCompleted 事件的处理程序。

=================== Windows Phone 7手机开发、.Net培训、期待与您交流! =========================

转载于:https://www.cnblogs.com/sixstar01/archive/2012/11/09/2762101.html

http://www.lbrq.cn/news/784189.html

相关文章:

  • 源码网站跟自己做的网站区别/长沙seo管理
  • 建设银行纪念币网站/谷歌官方seo入门指南
  • 开发一个软件的流程/苏州关键词优化搜索排名
  • 宁夏住房和城乡建设厅门户网站/sem竞价托管代运营
  • 邮箱号怎么注册?/seo优化是啥
  • wordpress纯代码/泰安网站seo
  • 嘉兴制作网站企业/百度指数在线查询工具
  • 苏州做网站品牌公司/怎么做电商卖东西
  • 查看网站流量的工具/网络营销与策划试题及答案
  • 最简单的html代码/seo培训资料
  • 网页设计可以进怎样的公司/天津seo渠道代理
  • 西安做网站哪里便宜/代运营公司排行榜
  • js与asp.net做的网站/自己的网站怎么样推广优化
  • 番禺网站建设报价/最新国际军事动态
  • 网站开发毕设文献/广告代理公司
  • 超云建站/全自动推广引流软件免费
  • 郴州高椅岭/关键词的优化和推广
  • 代理商加盟项目网站/下载百度网盘app
  • 户外网站 整站下载/市场推广计划书
  • 网上做兼职做网站/网络公关公司联系方式
  • 如何做单位网站/深圳百度国际大厦
  • 做网站的收获及感想/网络seo优化推广
  • 现在还做自适应网站/seo蜘蛛屯
  • 医院网站优化/宁波seo行者seo09
  • 做导航网站赚钱吗/app拉新推广怎么做
  • 北京城乡住房建设官方网站/培训心得体会800字
  • 网页游戏网站斗地主/永久免费的建站系统有哪些
  • 一个购物网站开发语言/友情链接的作用
  • 代做毕业设计的网站好/杭州seo的优化
  • 如何寻找一批做网站的公司/怎么优化一个网站
  • 一文搞定JavaServerPages基础,从0开始写一个登录与人数统计页面
  • Leetcode-2080区间内查询数字的频率
  • 后量子时代已至?中国量子加密技术突破与网络安全新基建
  • 8月4日星期一今日早报简报微语报早读
  • 飞算科技:用自主创新技术,为行业数字化转型按下 “加速键”
  • 第12届蓝桥杯Scratch图形化【省赛】初级组 2021年4月24日