2017-06-02 10 views
0

私は2つのタスク:Dispatcher.Invokeを組み合わせてオブジェクトインスタンスを作成することに問題があります。テキストボックスのテキストを別のスレッドの静的メソッドから変更する方法はありますか?

私は、テキストボックスを持っている:ここで

<TextBox x:Name="txtuid"> 

は静的メソッドです:

static private int onCallback(string Arr, int Len) 
{ 
    MainWindow my = new MainWindow(); 
    my.txtuid.Text = Arr; 
    .... 
    return 0; 
} 

問題はonCallbackは別のスレッドで実行されていると私はMainWindow my = new MainWindow()ためDispatcher.Invokeを使用する必要があること、です、しかし、私はこれをどのようにすることができますか?新しいControlをインスタンス化ではなく、1つの最も簡単な解決策を既存のApplication.Current.Dispatcherを使用することですすでに修正しようとしている。このシナリオでは

+0

私はあなたの質問のタイトルからタグを削除しました。なぜ[ここ](https://stackoverflow.com/help/tagging)を参照してください。 – dymanoid

+0

ありがとうございました。ごめんなさい! – mhuber

答えて

1

あなたは、既存のインスタンスのTextプロパティを設定するべきですMainWindow代わりに新しいものを作成する:

static private int onCallback(string Arr, int Len) 
{ 
    Application.Current.Dispatcher.Invoke(new Action(() => 
    { 
     MainWindow my = Application.Current.Windows.OfType<MainWindow>().FirstOrDefault(); 
     my.txtuid.Text = Arr; 
    })); 
    return 0; 
} 
+0

これは問題を解決しました。どうもありがとうございました! – mhuber

1

static private int onCallback(string Arr, int Len) 
{ 
    Application.Current.Dispatcher.Invoke(new Action(() => 
    { 
     MainWindow my = new MainWindow(); 
     my.txtuid.Text = Arr; 
     .... 
    })); 
    return 0; 
} 
+0

私はエラーはありませんが、テキストは変更されていません。 – mhuber

+0

そして、ディスパッチャーを使用せずにUIスレッドからこのメソッドを呼び出すと機能しますか? – Grx70

+0

それはうまくいきませんでした。 mm8私の間違いを私に示した。 Grx70のご協力ありがとうございました! – mhuber

関連する問題