代码之家  ›  专栏  ›  技术社区  ›  Eight-Bit Guru

vs2010/.NET 4.0中BackgroundWorker线程访问的区别?

  •  3
  • Eight-Bit Guru  · 技术社区  · 15 年前

    这里有一个有趣的例子-在VS2005/VS2008中,在运行.NET 2.0/.NET 3.0/.NET 3.5时,BackgroundWorker线程可能不会直接更新启动该线程的WinForms窗体上的控件-您将获得 System.InvalidOperationException 在BackgroundWorker中声明“跨线程操作无效:从创建线程以外的线程访问控件”TheControl“。我记得在2004年左右的时候,我第一次开始写带有后台线程的.NET WinForms应用程序时就提到过这个问题。有几种方法可以解决这个问题——这不是一个要求答案的问题。

    最近有人告诉我这种手术 现在允许在vs2010/.net 4.0中写入。这在我看来不太可能,因为这种对象访问限制一直是线程安全编程的一个相当基本的部分。允许BackgroundWorker线程直接访问不是由它自己拥有的对象,而是由它的父UI窗体所拥有的对象,这似乎违反了这一原则。在.NET 4.0文档中进行的一次搜索没有发现任何可以解释这种行为的明显变化。

    我没有VS2010/.NET 4.0来测试这一点-有权访问该工具集的任何人是否确定模型是否已更改为允许这种线程交互?我想在将来利用它,或者部署cluestick。;)

    1 回复  |  直到 15 年前
        1
  •  6
  •   Stephen Cleary    15 年前

    不,它仍然是一个无效的操作异常。

    我只是为了确认一下。

    推荐文章