本人是C#初学者,本文用于记录开发过程中遇到的书本上难于找到的问题。
C# in WINCE问题之一:Control.Invoke 关键词:C# WINCE 多线程 控件 委托 NotSupportedException
由于C#使用了多线程,并且需要在非Form所有者线程里更新Form
不知是什么原因。按照MSDN的例程标准编写的C#程序,总是没法在WINCE终端上成功执行,不管用同步Invoke或是异步BeginInvoke的方法,都会出现NotSupportException异常,在网上找了多种解决方法未果。
之前我都是采用在调用者类里定义委托的方式,今天看了http://www.cnblogs.com/smartstone/archive/2008/06/23/1228180.html这篇文章,抱着试一试的心态,测试了异步委托调用和同步委托调用,居然发现该终端支持同步委托。代码如下:
public delegate void DeleSetMyView(mystruct info);//mystruct 为自定义的变量
void SetMyView(mystruct info)
{
// 这里是对界面做更新的代码
}
void CrossSetMyView(mystruct info)
{
if(this.InvokeRequired)
{
DeleSetMyView objectDeleSetMyView = new DeleSetMyView(CrossSetMyView);//初始化一个委托调用
try
{
this.Invoke(objectDeleSetMyView ,new object[] { info } );
}
catch
{
}
}
else
{
SetMyView(info);
}
}
只需要直接在外部线程调用CrossSetMyView就可以了