バックグラウンド:
完了するまでに数秒以上かかる複数の操作を含むクラスがあります。それまでの間、UIを更新したいと思います。したがって、通常は BackgroundWorker を使用します。しかし、何らかの理由で、BackGroundWorker が常に思いどおりに動作するとは限りません (例: イベントで WebBrowser を使用し、ReportProgress イベントを呼び出そうとすると、BackgroundWorker がクラッシュしたように見えます)。
そのため、Ui をメインスレッドから分離することで、これらすべてを回避しています。
この疑似コードはそれをよりよく説明しています:
public Ui ui;
main
{
Thread threadUi = new Thread(initiateUi);
//Initiate and start Thread
//Everything I will do from here on will not have any consequences
//on my ui.
//
//Object Ui can still be publicly accessed, making it possible to
//update the user interface.
}
クラス Bar のインスタンスがある場合、次のように UI からアクセスできるようにします。
public Bar bar1;
public Bar bar2;
main
{
//
//other stuff here
//
Thread threadBar1 = //New Thread where I call the Bar initializer function
//and pass bar1 as parameter.
Thread threadBar2 = //idem dito, except with bar2 as parameter
//
//other stuff here
//
}
この設計では、次の関数を使用してユーザー インターフェイスから bar1 と bar2 を呼び出すことができます。
Program.bar1.someFunction();
問題:
ここで、FooHandler というクラスがあるとします。このクラスには、特定の FooDepository 内の Foo のすべてのインスタンスを検索する関数と、Foo オブジェクトを操作するその他の関数があります。私の場合、複数のインスタンスを持つ必要がないため、これは静的クラスです。
しかし、FooHandler から関数を呼び出す場合、関数は UI スレッドで実行されます。これは呼び出しスレッドであるためです (よくわかりませんが、この件に関するドキュメントは見つかりませんでした)。ですから、私が始めた問題に直面しようとしている可能性は十分にあります。
質問:
呼び出しスレッドの処理能力を使用せずに静的クラスの関数にアクセスすることは可能ですか?