複数の小さなアプリケーションを開発する際に、バックグラウンドタスクに新しいスレッドを使用することができます。私はいくつかのオプション、主にバックグラウンドワーカーと代理人を試しました。私がやりたいことは、すべてのスレッドを実行するための専用のスレッドクラスを用意して、複数のプログラムで再利用できるようにすることです。スレッドを処理するためのクラスを作成する
私はこの場所で読むべきか、見ているか、何をすべきかについてのガイダンスを探しています。私は今、失敗するかの
例:
メインスレッド(GUI) ユーザーは、いくつかのロジックを通過し、(完全な計算まで、GUIを凍結するだろう)、複数のタスク集中的な計算を開始し、ボタン1をクリック開始します。私がやりたいのは何
はこのような何か..です
メインスレッド(GUI)は ユーザーが何らかの GUIスレッドのレポートのリストにエンキュースレッドプロセスとして進行スレッドを作成Button1をクリック開始します計算 スレッド終了とデキュー後で (潜在的に?)バックグラウンドでループしているスレッドクラスは、アイテムがエンキューして処理されるのを待っています。
小さなタスクのための私の典型的な方法は
Thread fooThread= new Thread((ThreadStart)delegate
{
//command
});
fooThread.Start();
問題がある、私のボタンイベントは、それらに追加のアイテムを持っている(多分、私はそれらをリファクタリングしてください)
サンプル
private void btnCopy_Click(object sender, EventArgs e)
{
//check file exists, check destination exists, etc
//start new thread
Thread fooThread= new Thread((ThreadStart)delegate
{
//copy files to destination using method foobarCopy(params)
});
fooThread.Start();
//if file copy is successful, inform user on GUI.
}
I主に.NET2.0を使用していますが、必要に応じて4.5までバンプすることができます。
ボタンクリックのコードはおそらくあなたのクラスであるはずです。 'FileCopier'や' Start() 'との間には何もありません。それが完了し、通知があなた次第であるかどうかを判断しますが、それは本当にあなたのクラスです。独自のスレッドマネージャクラスを作成する必要はないと思いますが、そのコードをビジネスオブジェクトにリファクタリングして、そこからリファクタリングする次のものの基本クラスを作ることができます。 – TyCobb
既存のスレッドプールサポートを使用するほうがよいでしょう。 –
おそらく、非同期コールバックメソッドを使用してguiの結果を操作するか、アスペクト指向のフレームワークチェックを使用するか、spring.net aopのようなロジック、データなどを制御する必要があります。 – FreeMan