无效的跨线程访问WP7

时间:2013-02-04 08:57:06

标签: windows-phone-7 dispatcher

我正在使用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方法中没有任何异常

1 个答案:

答案 0 :(得分:0)

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

在调度程序中包含DisplayEvent的最后两行

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