我有一个调用第三方API的Windows应用程序:
return fsDesktopApi.FindAndViewDocument(fsCabinetName, searchCriteria);
调用应用程序将打开一个表单,在关闭结果显示的文档之前,该表单无法移动或最小化。有没有办法可以调用这个API,而不会让我的表单处于这种惰性状态?
答案 0 :(得分:2)
由于调用似乎阻止了UI线程,阻止它处理来自操作系统的消息,因此可以在单独的线程中运行调用:
var thread = new Thread(() => fsDesktopApi.FindAndViewDocument(fsCabinetName, searchCriteria));
thread.Start();
答案 1 :(得分:2)
您的代码与UI在同一个线程上发生,因此在处理操作之前您无法执行任何操作。您有多种方法可以执行异步操作,例如
Threading
Async/await
BackgroundWorker
Task
等等。对该主题进行一些研究,并选择最适合您需求的主题。
答案 2 :(得分:0)
最简单的方法是使用BackgroundWorker。这是一个简单(不完整)的例子。
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += CallApi;
worker.RunWorkerCompleted += ApiCallComplete;
private void CallApi(object sender, DoWorkEventArgs e)
{
//read & cast fsCabinetName & searchCriteria from e.Argument
e.Result = fsDesktopApi.FindAndViewDocument(fsCabinetName, searchCriteria);
}
private void ApiCallComplete(object sender, RunWorkerCompletedEventArgs e)
{
//cast and read result from e.Result after checking for exception or cancellation & handle on UI thread.
}
然后你可以这样打电话给你的工人:
worker.RunWorkerAsync(/*Pass Your Argument Object Here*/);