2011-12-20 8 views
0

私のアプリケーションはいくつかのスレッドを実行し、すべてのスレッドは何かを行います。 各スレッドがリストボックスにステータスを表示したいと思っています。各スレッドのステータスを表示

スレッドはスレッドIDなどを使用して自分自身を識別し、ステータスをListに設定する方法を教えてください。

+0

スレッドのステータスはどういう意味ですか? – Falanwe

+0

@Falanweたとえば残り時間。 –

答えて

1

すべてのスレッドにはIDがあります。

グローバルなデータ構造をある状態で更新するには、辞書を使用してidをキーとして使用します。そのデータ構造のアクセスをロックするのに注意してください:あなたはちょうどあなたが監視したいThreadの(あなたが好きな配列、リスト、)コレクションを保つことができる

Dictionary<int, SomeStateClass> threadStates = new Dictionary<int, SomeStateClass>(); 

public void updateThreadState(int id, SomeStateClass newState) { 
    lock (threadStates) { 
     threadStates[id] = newState; 
    } 
} 
2

管理対象スレッドはThread.CurrentThread.ManagedThreadIdで識別できます。 Invokeをリストボックスに呼び出す(またはWPFを使用している場合はDispatcherを使用する)ことを覚えておいてください。それ以外のスレッドはUIスレッドが直接アクセスできません。

+0

Listにデータを入力してListBoxのデータソースを設定すると、呼び出しを呼び出す必要がありますか? –

+0

@Mahdi:はい、あなたは、セカンダリからのメインスレッドで動作するように、呼び出しが必要です。 – Tigran

1

代理人でInvokeを使用できます。各スレッドは、所有するListBoxItemの更新を行います。

1

。スレッドクラスは、ThreadStateプロパティを含む多くのプロパティを公開します。そこから、必要な情報を簡単に表示することができます。

このように、作業スレッドは状態を通知することを心配する必要はありません。

関連する問題