私は私の現在の状況に対する非常に単純な解決策のように見えるものを見つけました。
私の現在の状況では、GUIスレッドを停止させないように、新しいスレッドでI/Oを多用する操作を実行したいと考えています。フォームのメンバーとして、これらのI / O操作をすでに実行する関数を作成しましたが、GUIスレッドで実行すると、アプリケーションを使用するのが非常に面倒になります。したがって、私の計画は、この関数を新しいスレッドで実行することでした。そこで、自分のフォームでThread変数を作成し、その関数をThreadStartパラメーターとして使用できるようにしようとしています。しかし、それは気に入らないようです。
別のスレッドへの応答として、ここでエレガントなソリューションを見つけました。
///...blah blah updating files
string newText = "abc"; // running on worker thread
this.Invoke((MethodInvoker)delegate {
someLabel.Text = newText; // runs on UI thread
});
///...blah blah more updating files
その応答の外観から、この関数を新しいスレッドで実行し、匿名関数を使用して、スレッドが計算を終了したときにフォームを更新することができます。しかし、私はその回答の空白を埋めるのに十分ではありません。
私がスレッドについて読んだように見えることはすべて、私のThreadStart関数は新しいクラスの静的メソッドである必要があると言っています。その応答は、Formクラス内でそれを実行できることを示唆しているようです。そのため、this
参照は引き続きFormインスタンスを参照します。そうでなければ、ThreadStartパラメーターが別のクラスである場合、Formインスタンスへの参照を渡す必要があり、それはより多くのコードのように見えますよね?
誰かが私がその応答のコンテキストを記入するのを手伝ってくれませんか?前もって感謝します!