0

スレッドに問題があります。SMS を受信したときに txtoutput(textbox) にテキストを表示したいのですが、うまくいきません。

private void Output(string text)
{
    this.expander.IsExpanded = true; // Exception catched: The calling thread can not access this object because a different thread owns it.

    if (txtOutput.Dispatcher.CheckAccess())
    {
        txtOutput.AppendText(text);
        txtOutput.AppendText("\r\n");
    }
    else
    {
        this.txtOutput.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)delegate
         {
             //  txtOutput.AppendText += text Environment.NewLine;
             txtOutput.AppendText(text);
             txtOutput.AppendText("\r\n");
         }); 
    }
}
4

2 に答える 2

2

代わりにこれを試してください

private void Output(string text)
{
    if (txtOutput.Dispatcher.CheckAccess())
    {
        this.expander.IsExpanded = true;
        txtOutput.AppendText(text);
        txtOutput.AppendText("\r\n");
    }
    else
    {
        this.txtOutput.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)delegate
         {
             this.expander.IsExpanded = true;
             //  txtOutput.AppendText += text Environment.NewLine;
             txtOutput.AppendText(text);
             txtOutput.AppendText("\r\n");
         }); 
    }
}

改良版:

private void Output(string text)
{
    if (!txtOutput.Dispatcher.CheckAccess())
    {
         this.txtOutput.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)delegate
         {
             Output(text); //Call this function again on the correct thread!
         });
         return;
    }
    this.expander.IsExpanded = true;
    txtOutput.AppendText(text);
    txtOutput.AppendText("\r\n");
}
于 2013-06-24T09:21:29.033 に答える
2

のテキストをtxtOutput正しい方法で設定しています (CheckAccess()およびBeginInvoke)。で同じことを行いexpanderます。

于 2013-06-24T09:21:55.883 に答える