ソースがない .dll に埋もれているクラスに時間のかかるメソッドがあります。このメソッドを呼び出すときに UI をブロックしたくありません。これを行うために BackgroundWorker を使用しようとしています。btn_Click イベント ハンドラーから RunWorkerAsync を呼び出します。ワーカー スレッドの外部で dllClass インスタンスを作成すると (以下のように)、操作が完了するまで UI がフリーズします。この操作はまた、タイマーがカチカチ音をたてないようにブロックします。
public static dllClass dllClassInstance = new dllClass();
void worker1_DoWork(object sender, DoWorkEventArgs e)
{
dllClassInstance.TimeConsumingMethod();
}
一方、(次のコード セグメントのように) ワーカー スレッド内でクラスをインスタンス化すると、意図したとおりに動作します。
void worker1_DoWork(object sender, DoWorkEventArgs e)
{
dllClass dllClassInstance = new dllClass();
dllClassInstance.TimeConsumingMethod();
}
後者を使用する際の問題は、時間のかかるメソッドの前後に他のメソッドを呼び出す必要があるため、その特定のワーカーの外部にあるクラス インスタンスにアクセスする必要があることです。また、e.Argument を介してクラス インスタンスを BackgroundWorker に渡そうとしましたが、UI がフリーズしました。UIをブロックせずにそのメソッドを呼び出す方法を提案している人はいますか?