如何在C#中对同步方法进行异步调用

时间:2019-12-17 14:12:42

标签: c# multithreading user-interface asynchronous synchronous

我正在编写一种方法(用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仍然可以响应?

感谢您的帮助!

0 个答案:

没有答案