ワーカー コードを GUI コードから完全に別のクラスに分離しようとしていますが、進行状況の更新とファイル出力のために GUI にレポートできるようにしたいと考えています。たとえば、自分の GUI でワーカー クラスに「シリアル ポートから 10 行を読み取りますが、読み取った内容を受け取るたびに報告してください」と言わせたいとします。現在のところ、これを行う最善の方法は、GUI を 10 回ループさせ、各ループでワーカー クラスにコマンドを送信して 1 つのものを読み取り、それを返すことです。
ワーカー クラスの側ですべてのループを保持することを本当に好みます。これは、使用可能なデータについてより多くの情報が得られるためです (実際のデータ量は可変であり、ワーカー クラスは既にデータ量にアクセスできます)。これを GUI クラスに送り返してループ自体を実行したくありません。
私はbackgroundworkerを調べましたが、それは長い操作中に行われたパーセンテージのみを報告しているようで、他には何も報告していないようです. どうすればこれを達成できるか、誰かが良い考えを持っていますか?
以下は、私がやりたいことを (できれば) よりよく説明するためのプログラムのシェルです。私が必要とすることを行うためにコードをどのように編集しますか?
GUI のメイン クラス:
class Main_Class
{
...
/* Assume in the area we have instantiated these items and placed them on the form:
* Button DoSomething: A button to do something
* TextBox ShowInfo: A text box to report something from the worker class
*/
Worker_Class timewaster = new Worker_Class();
private void buttonDoSomething_Click(object sender, EventArgs e)
{
timewaster.a_lengthy_task();
}
}
別のワーカー クラス:
class Worker_Class
{
...//Various Setup stuff up here
void a_lengthy task()
{
int iteration = 0;
while(iteration < 10)
{
Datetime saveNOW = Datetime.Now; //lets say I report this back to the the GUI to write in that ShowInfo box
Thread.sleep(10000); //To waste time and make this lengthy
//Your code here to facilitate sending saveNOW back to the the Main_Class and display it on the ShowInfo textbox.
iteration++
}
}
}