【问题标题】:Method doesn't return controlling方法不返回控制
【发布时间】:2011-10-07 05:47:08
【问题描述】:

我在 WPF 表单和另一个类上有一个网格,其中包含一些事件。从我的 wpf 表单中,我订阅了这些事件,我希望他们将一些对象添加到我的网格中,但我只有“调用线程无法访问该对象,因为不同的线程拥有它”。如何避免此问题并获得相同的功能?

【问题讨论】:

  • +1 积分,以便您发表评论
  • 这是一个重复的问题:herehere 或其他八个 :)

标签: c# wpf


【解决方案1】:

这已在 StackOverflow 和其他地方以令人作呕的方式进行了报道。您需要使用 Dispatcher 将您的访问编组回 UI 线程。例如:

private void OnSomeEvent(object sender, EventArgs e)
{
    // this is being called on a thread other than the UI thread so marshal back to the UI thread
    Dispatcher.BeginInvoke((ThreadStart)delegate
    {
        // now the grid can be accessed
        grid.Whatever = foo;
    });
}

【讨论】:

    【解决方案2】:

    这是一个跨线程问题。查看委托创建,以便您可以安全地调用另一个线程来修改在不同线程上创建的内容。这是一篇很好的 MSDN 文章,介绍了如何进行这些线程安全调用。

    http://msdn.microsoft.com/en-us/library/ms171728(v=vs.80).aspx

    【讨论】:

      猜你喜欢
      • 2014-09-22
      • 2019-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多