我有一个耗费时间的方法,它埋在一个.dll文件中,我没有它的源代码。当我调用此方法时,我不想阻止用户界面。我一直在尝试使用BackgroundWorker来做到这一点。我从btn_Click事件处理程序调用RunWorkerAsync。当我在工作线程之外创建dllClass实例时(如下所示),UI将冻结,直到操作完成。该操作还会阻止定时器发出滴答声。我的BackgroundWorker仍然阻止了我的用户界面
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冻结。有没有人有建议如何调用该方法,而不会阻止用户界面?
真正的解决方案是更改TimeConsumingMethod ...它正在做一些导致此问题的事情。你能告诉我们那个代码吗? –
@RobertLevy引用OP:“......在一个埋在.dll中的类中,我没有它的源代码。” :( – Crisfole
我会使用反射工具,并深入挖掘dll看看它在做什么 – tsells