我在一个隐藏在我没有源代码的 .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 的情况下调用该方法?