调用API后,表单变得不可用

时间:2015-03-04 16:38:34

标签: c# .net windows-applications

我有一个调用第三方API的Windows应用程序:

    return fsDesktopApi.FindAndViewDocument(fsCabinetName, searchCriteria);

调用应用程序将打开一个表单,在关闭结果显示的文档之前,该表单无法移动或最小化。有没有办法可以调用这个API,而不会让我的表单处于这种惰性状态?

3 个答案:

答案 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*/);