- 5
- 0
- 约7.21千字
- 约 4页
- 2021-10-13 发布于福建
- 举报
C# Delegate/ 委托 与多线程
Learning , by 木公 .
最近写到两个程序都用到了多线程,但是由于需要调用主线程 UI ,所以总是会出错, Google 了一下,
终于找到了使用 Delegate( 委托 )的解决方法,现在贴出来存档并且分享:
很多时候写 windows 程序都需要结合多线程,在 .net 中用如下得代码来创建并启动一个新的线程。
public void ThreadProc () ;
Thread thread = new Thread ( new ThreadStart ( ThreadProc )) ;
thread. IsBackground = true ;
thread. Start () ;
但是很多时候,在新的线程中,我们需要与 UI 进行交互,在 .net 中不允许我们直接这样做。可以参考
MSDN 中的描述:
“Windows 窗体”使用单线程单元 (STA) 模型,因为“ Windows 窗体”基于本机 Win32 窗口,
而 Win32 窗口从本质上而言是单元线程。 STA 模型意味着可以在任何线程上创建窗口, 但窗口一旦创建
后就不能切换线程,并且对它的所有函数调用都必须在其创建线程上发生。除了 Windows 窗体之外, .
NET Framework 中的类使用自由线程模型。
STA 模型要求需从控件的非创建线程调用的控件上的任何方法必须被封送到(在其上执行)该控件的
创建线程。基类 Control 为此目的提供了若干方法( Invoke 、BeginInvoke 和 EndInvoke )。Invoke
生成同步方法调用; BeginInvoke 生成异步方法调用。
Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性。因此,如果从另一个线程调用控件
的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。
正如所看到的,我们必须调用 Invoke 方法,而 BeginInvoke 可以认为是 Invoke 的异步版本。调用方
法如下:
public delegate void OutDelegate ( string text ) ;
public void OutText ( string text )
{
txt. AppendText ( text ) ;
txt. AppendText ( tn ) ;
}
OutDelegate outdelegate = new OutDelegate ( OutText ) ;
this . BeginInvoke ( outdelegate, new object []{ text }) ;
如果我们需要在另外一个线程里面对 UI 进行操作,我们需要一个类似 OutText 的函数,还需要一个该
函数的委托 delegate ,当然,这里展示的是自定义的, .net 中还有很多其他类型的委托,可以直接使用,
不需要而外声明。例如: MethodInvoker 和 EventHandler ,这两种类型委托的函数外观是固定的, Met
hodInvoker 是 void Function() 类型的委托,而 EventHandler 是 void Function(object, EventArgs)
类型的委托,第一个不支持参数,第二中的参数类型和数量都是固定的,这两种委托可以很方便的调用,
但是
您可能关注的文档
- CWI考试试题汇编[收集].pdf
- Cwnd全部函数[收集].pdf
- CX20106A的引脚注释[收集].pdf
- cxf_axis_xfire客户端调用的几种方法[收集].pdf
- CwRsync4.0.2安装配置文档[整理].pdf
- cygwin基本命令[借鉴].pdf
- cygwin安装图解[归纳].pdf
- cygwin常用命令[定义].pdf
- C_C语言编码规范[定义].pdf
- C_操作Access数据库[参照].pdf
- 2025年全国演出经纪人员资格认定考试试卷带答案(研优卷).docx
- 2025年全国演出经纪人员资格认定考试试卷完整版.docx
- 2025年全国演出经纪人员资格认定考试试题库及完整答案.docx
- 2025年全国演出经纪人员资格认定考试试卷完美版.docx
- 2025年全国演出经纪人员资格认定考试试卷含答案(实用).docx
- 2025年全国演出经纪人员资格认定考试试卷及答案(各地真题).docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
- 2025年全国演出经纪人员资格认定考试试卷及答案1套.docx
- 2025年下半年四川成都市郫都区面向社会引进公共类事业单位人员2人备考题库最新.docx
- 2025年下半年内江市部分事业单位公开考试招聘工作人员(240人)备考题库附答案.docx
原创力文档

文档评论(0)