如何在线程/后台任务上执行长任务(即图像扫描)?

时间:2018-03-08 21:02:04

标签: .net multithreading

我使用EMC Captiva PixTools API开发图像扫描应用程序。 API建议一个简单的长时间循环来在扫描时接收图像,但这将阻止UI线程。

示例:

while(true)
{
   Image newImage = Scanner.GetNextImage(); // blocks until image is received
}

我想保证在单独的线程(不是UI线程)上执行,并继续运行直到用户取消它。我还需要将newImage对象返回给主线程,以便将其添加到UI中。

在Windows窗体应用程序中,我使用的是BackgroundWorker,但此代码是从.NET库运行的(然后在Windows窗体应用程序中加载)。

我一直试图了解异步/等待模式,但我不确定是否可以保证在单独的线程上运行任何东西?

有关解决此问题的最佳做法的任何建议吗?

1 个答案:

答案 0 :(得分:0)

async / await不保证线程是正确的。但是,Task.Run()确实如此。从这开始:

cordova.system.library.2=com.facebook.android:facebook-android-sdk:4.25.0

或者...

await Task.Run(
    () =>
    {
        while(true)
        {
           Image newImage = Scanner.GetNextImage();
           // ImageReceived(newImage); ?
        }
    }
);