【问题标题】:Invalid Cross thread access WP7无效的跨线程访问 WP7
【发布时间】:2013-02-04 19:29:28
【问题描述】:

我正在使用 Matrix xmppClient 在 WP7 上设置聊天客户端应用程序.. 在提供错误的凭据(用户名/密码)时,会引发无效的跨线程访问异常......我正在使用 Dipatcher.BeginInvoke,如下所示,但仍然会出现异常...... 谁能告诉我需要做些什么来解决这个问题? 谢谢

void xmppClient_OnAuthError(object sender, SaslEventArgs e)
    {           
        Dispatcher.BeginInvoke(() =>
        {
            DisplayEvent("OnAuthError", "authentication failed");
        });
    }

        void DisplayEvent(string evt, string arg1 = null, string arg2 = null)
    {
        var par = new Paragraph();
        par.Inlines.Add(new Run
        {
            Text = evt,
            FontSize = 14,
        });

        if (arg1 != null)
            par.Inlines.Add(new Run
            {
                Text = "\t=>" + arg1,
                FontSize = 14,
            });

        if (arg2 != null)
            par.Inlines.Add(new Run
            {
                Text = "\t=> " + arg2,
                FontSize = 14,
            });

        var rtf = new RichTextBox();
        rtf.Blocks.Add(par);
        stackEvents.Children.Add(rtf);
        ScrollToEnd(scrollEvents);
    }

在 DisplayEvent 方法中没有得到任何异常

【问题讨论】:

  • 在哪一行抛出异常? DisplayEvent()的代码是什么?
  • 我已经放置了DisplayEvent方法代码...请查看

标签: windows-phone-7 dispatcher


【解决方案1】:

发生无效的跨线程访问异常,通常是从非 UI 线程访问 UI 元素时。在您的 DisplayEvent 方法中可能正在发生这种情况。

在 Dispatcher 中包含 DisplayEvent 的最后 2 行

   ...
   rtf.Blocks.Add(par);
   Dispatcher.BeginInvoke(() =>
   {
      stackEvents.Children.Add(rtf);
      ScrollToEnd(scrollEvents);
   }
}

【讨论】:

  • void xmppClient_OnBeforeSasl(object sender, SaslEventArgs e) { Dispatcher.BeginInvoke(() => DisplayEvent("OnBeforeSasl"));在这个处理程序之后,我得到了异常 }; }
  • Deepak:如果您向我们展示与崩溃相关的代码可能会有所帮助。仅显示任何代码都无济于事。向我们展示抛出异常的代码行(= 显示在调试器中)以及一些周围的行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多