メインスレッドのどこかに、アプリケーション時間全体を通して一度だけインスタンス化できるオブジェクトを作成する新しいスレッドを作成します。C#シングルトンオブジェクトが関与するマルチスレッド
私の主なスレッドの下に、私はこのオブジェクトをグローバル変数でもある方法で使用する関数を持っています。
私はオブジェクトが作成されたのと同じスレッドでこの関数を実行します。
質問この関数を呼び出す必要があるときにメインスレッドの決定時にこれをどのように達成できますか?
// global variable
private static IWebDriver driver;
// Main Thread thread creation
Thread thread = new Thread(() =>
{
driver = new ChromeDriver(@"myPath");
});
thread.Start();
// some click event on main thread
myFunctionUsingDriverObject();
ドライバと同じスレッドで実行するように関数に指示する方法が必要です。通常はmethodInvoker
を使用しますが、IWebDriver
にはそのような方法はありません。では、ドライバのスレッドに関数を呼び出すことができる別の方法はありますか?
私はなぜこれをやりたいのだろうと思っている人は誰でも。それは、UIがメインスレッド上で実行されてから、メインスレッド上で実行されている場合、完了までUIがフリーズするためです。
新しいスレッドを作成しないのはなぜ?最も簡単で醜いのは、新しいスレッドを作成し、 'driver'がまだ' null'であるかどうかを調べる 'while(true)'を入れ、 'myFunctionUsingDriverObject()'を続けます。 –
@SoroushFalahati私はOPが "UIスレッド"と "Dispatcher.Invoke"に似た機能をWPFで実装しようとしていると考えています。これは、いくつかのオブジェクト(特にWindows UI)が、それらを作成したスレッドとは異なるスレッドから使用されると誤った動作をする可能性があるため、非常に一般的な要件です。 –
https://stackoverflow.com/questions/30719366/run-work-onのようにhttps://www.bing.com/search?q=c%23+schedule+task+particular+threadを探していると思います固有のスレッド。 (重複することもあります) –