2016-09-26 8 views
0

私はクライアント/サーバーアプリケーションを作成していますが、Socket.Receiveを実行するために、無限ループを含むスレッドからUIを更新しようとしています。ソケットでパケットを受信すると、UIを更新してループを続行する必要があります。問題は、スレッドがUIを管理できないため、スレッド内でBeginInvokeを呼び出そうとしましたが、結果はUIが凍結したことです。 BeginInvokeをスレッド内で呼び出すことを可能にし、UIにコントロールを返す単純なプロシージャはありますか?WPFアプリケーションのUIをスレッドから更新するにはどうすればよいですか?

答えて

2

ブロッキング呼び出しを使用して、メインスレッドのUIを更新します。この方法で、スレッドは更新が完了するのを待ってから続行します。非ブロッキングの非同期の方法で起動していた可能性があります。おそらくメインスレッドがあふれていて、それが凍っている理由です。

System.Windows.Application.Current.Dispatcher.Invoke(delegate{ 
    // update UI 
}); 
+0

メインスレッドではなく別のスレッドで行うことはできますか? –

+0

いつでも任意のスレッドから呼び出すことができます。基本的には、このコードをスレッドループにコピー&ペーストして、デリゲート内のUIを更新してください。それでおしまい。 – GregaMohorko

関連する問題