我正在编写一种方法(用C#语言编写),该方法将链接到GUI中的按钮。 此方法的一个操作非常耗时(需要几分钟)。这是对无法编辑的常规同步void函数的调用。为了在执行该方法时使GUI响应,我尝试使用异步代码:
时间密集型方法:
public void TimeIntensiveFunction(string Parameter_1, DataTable Parameter_2, DataTable Parameter_3)
{
//time intensive stuff
//creates a large CSV btw.
}
这是我想出的:
public async void ResponseToButton_Click(object sender, RoutedEventArgs e)
{
//doing some stuff
await AsyncTask_(dt, dt_2);
}
private async System.Threading.Tasks.Task AsyncTask_(DataTable dt, DataTable dt_2)
{
await System.Threading.Tasks.Task.Run(() => TimeIntensiveFunction(globalText, dt,dt_2));
}
我在此解决方案Wrapping synchronous code into asynchronous call中发现了类似的问题,但是当我运行代码时,抛出了一个我不理解的异常:
System.InvalidOperationException
Nachricht = Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet.
english:
System.InvalidOperationException
Nachricht = The calling thread cannot access this object because the object is owned by another thread.
有人可以向我展示此例外情况吗? 时间密集型方法被代码中的其他方法使用,但不应同时执行。不幸的是,我无法向您展示该方法本身。 还是有另一种方法可以使我的ResponseToButton_Clicke方法异步,以使GUI仍然可以响应?
感谢您的帮助!