.NET Compact Framework 线程与界面上的控件

要实现这样的功能:

    点击加载,跳出一个加载进度窗体,窗体上面的进度条在不停的动,加载完毕后,本窗体自动关闭。

    很容易联想到启用一个分线程,启动进度窗体,加载完毕后,我在主线程中想手动关闭 prg.close(),得到的结果是错误,线程访问了非法资源。

    其实在桌面.net framework和.net cf都不支持让用户界面不属于的线程访问他们的大多数属性和方法。虽然代码可以编译执行,但结果将不可预测。为了允许在线程间互相调用,他们提供了一个Control.Invoke()的方法。

  在后台线程和用户界面线程之间通信数据的一个合理和简单的方法就是在用户界面线程上运行代码周期性地轮询你专门设计的管理后台线程的对象,了解是否有用户界面需要的数据。通常这样做要比深入研究交叉线程调用方法的复杂特征容易的多。

   第二种方法是使用一个指向你应用窗口上函数的回调代理。在你的窗口类中一个函数能指定并且这个函数能通过窗口Invoke()方法调用。对Invoke()的调用将使函数在用户界面线程中执行。这样这个就可以获得它需要的任何数据并且同步更写用户界面。这个方法的好处是前台线程并不需要轮询并且在后台线程工作完成时可以马上接受更新。

转载于:https://www.cnblogs.com/abob/archive/2008/03/04/1090559.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值