2

私のアプリケーションは、メイン (UI) スレッド以外のスレッドでハードウェア デバイスからいくつかのコマンドを受け取ります。

// start receiver-thread
m_recThread = new Thread(RecThread) { Name = "RS" };

このスレッドから、UI Theraad で何らかのアクションを実行したいと考えています。ワンボタンクリックと言ってください!!! 私は使っている

Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, 
  new Action<Vote>(StartThisVote), presidentvote);

しかし、これはうまくいきませんでした。このバックグラウンド スレッドからメイン スレッド (UI) でコマンドを実行できるユーザーを教えてください。

4

1 に答える 1

2

バックグラウンド スレッドからはCurrentDispatchernull になります。変更する UI に関連付けられたディスパッチャーを使用する必要があります。スレッド コードからコントロール自体にアクセスできない場合は、スレッドの開始時にディスパッチャを直接渡すことができます。(セカンダリ スレッドを開始するときに UI スレッドを使用していると仮定します。)

コメントに記載されているように、ディスパッチャが 1 つあると仮定すると (これは非常に可能性が高い) Application.Current.Dispatcher、どこからでもアクセスできます。(この静的なアプローチでテストするのは難しいですが、コーディングは簡単です...)

または、C# 5 と .NET 4.5 を使用している場合は、非同期メソッドを検討することをお勧めします。これにより、多くのことがより簡単になります。

于 2013-01-16T12:10:16.757 に答える