正在阅读:Windows Forms实现安全多线程(附例码)Windows Forms实现安全多线程(附例码)

2005-09-15 10:14 出处: 作者:smartsoft 2005 责任编辑:moningfeng

多线程安全

  到这里为止,我们已经解决了长任务的难题和传递参数的困扰。但是我们真的解决了全部问题吗?回答是否定的。

  我们知道 Windows 编程中有一个必须遵守的原则,那就是在一个窗体创建线程之外的任何线程中都不允许操作窗体。

  我们上面的程序就是存在这样的问题:工作线程是在 ShowProgress 方法中修改了用户界面的进度条的属性。那为什么程序运行没有出现问题,运行正常呢?

  没有发生问题是因为是现在的Windows XP操作系统对这类问题有非常健壮的解决方法,让我们避免了问题的发生。但是我们现在的程序不能保证在其他的操作系统能够运行正常!

  真正的解决方法是我们能够认识到问题所在,并在程序中加以避免。

  如何避免多线程的窗体资源访问的安全问题呢?其实非常简单,有两种方法:

  一种方法就是不管线程是否是用户界面线程,对用户界面资源的访问统一由委托完成;

  另一种方法是在每个 Windows Forms 用户界面类中都有一个 InvokeRequired 属性,它用来标识当前线程是否能够直接访问窗体资源。我们只需要检查这个属性的值,只有当允许直接访问窗体资源时才直接访问相应的资源,否则,就需要通过委托进行访问了。

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品