第6章进程与线程开发程序设计讲述.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.4.3 多线程互斥程序开发 ReaderWriterLock的基本用法如下: //创建阅读器和编写器锁 private ReaderWriterLock rwl = new ReaderWriterLock (); … //写操作 rwl.AcquireWriterLock (); try { //互斥段的代码DoSomething(); …… } //写对象非正常释放 catch (ThreadAbortException等异常) { rwl. ReleaseWriterLock (); } //写对象正常释放 rwl. ReleaseWriterLock (); … 6.4.3 多线程互斥程序开发 //读操作 rwl.AcquireReaderLock (); try { //互斥段的代码DoSomething(); …… } //读对象非正常释放 catch (ThreadAbortException等异常) { rwl. ReleaseReaderLock (); } //读对象正常释放 rwl. ReleaseReaderLock (); 6.4.4 多线程同步程序开发 1.类比示例简析 多工种协同生产示意图 : 2.线程示例简析 多线程同步 : 6.4.4 多线程同步程序开发 3.示例程序设计 【示例代码:chpt6-5\ ThreadSynchronize】 窗体Form1及其各控件的属性设置 : (详细代码见教材) 控件(Name) 属性 属性新值 label1 Text 待装数量 label2 Name lbConvey Text 0 label 3 Text 生产数量 label 4 Text 已装数量 richTextBox1 Name lstProduction Text 0 richTextBox2 Name lstConvey Text 0 button1 Name btnStart Text 启动线程 button2 Name btnStop Text 终止线程 6.5 Windows窗体控件的跨线程访问 访问 Windows 窗体控件本质上却不是线程安全的。因为,如果有两个或多个线程同时操作某一控件的情况,则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的bug,包括争用和死锁。因此,在C#程序设计中,确保正确、可靠地访问控件是非常重要的。 6.5.1 非线程安全的窗体控件访问概述 在C#中也可以采用非线程安全调用的方法对窗体控件进行访问,.NET Framework 有助于在以非线程安全方式访问控件时检测到这一问题。在调试器中运行应用程序时,如果在创建某控件的线程之外的其他线程(从辅助线程)试图直接调用该控件,VS调试器就会引发一个 InvalidOperationException异常,警告对控件的调用不是线程安全的,并提示:“从不是创建控件 control name 的线程访问它。” 可以通过将CheckForIllegalCrossThreadCalls属性设置为false来禁用这个异常 6.5.2 线程安全的窗体控件访问概述 在C#中对于Windows窗体控件的跨线程访问,可以采用以下两种方法: 1.利用封送处理进行的线程安全调用 (1)查询控件的InvokeRequired属性。 (2)如果InvokeRequired返回true,则使用实际调用控件的委托来调用Invoke。 (3)如果InvokeRequired返回false,则直接调用控件。 2.使用 BackgroundWorker进行的线程安全调用 在应用程序中实现多线程的首选方式是使用BackgroundWorker组件。BackgroundWorker组件使用事件驱动模型实现多线程。 辅助线程运行DoWork事件处理程序,创建控件的线程运行ProgressChanged和RunWorkerCompleted 事件处理程序。 6.5.3 线程安全的窗体控件访问程序开发 在此,利用上述的两种线程安全的窗体控件访问方法,对6.3.3 Windows窗体控件的跨线程访问的示例chpt6-3a进行适当改进,并在功能方面作部分调整,即,将原示例中的第二个计数文本框textBox2用作计数线程的状态显示。 【示例代码:chpt6-5a\Test4】 (详细代码见教材) 2013.07 第6章 进程与线程开发程序设计 学习要点 1.了解进程与线程的基本技术 2.掌握C#进程应用程序开发方法 3.掌握C#常用多线程互斥与同步的应用程序开发方法 4.掌握C#跨线程访问控件的基本方法 6.1 进程与线程概述 1.进

文档评论(0)

6952225 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档