C# 用C语言实现OCR的多线程处理#

C# 用C语言实现OCR的多线程处理#,c#,multithreading,ocr,C#,Multithreading,Ocr,我需要一个关于WinForms C应用程序中多线程实现的建议。我们有一个图像-包含文本和数字,并且有单独的方法来识别不同类型的数据。例如: decimal[] numbers = getNumbers(bitmap, dictionary1); string[] text = getText(bitmap, dictionary2); int[] integers = getInts(bitmap, dictionary3); // add 5 more data types (list, in

我需要一个关于WinForms C应用程序中多线程实现的建议。我们有一个图像-包含文本数字,并且有单独的方法来识别不同类型的数据。例如:

decimal[] numbers = getNumbers(bitmap, dictionary1);
string[] text = getText(bitmap, dictionary2);
int[] integers = getInts(bitmap, dictionary3);
// add 5 more data types (list, int[], etc..)
因此,整个过程大约需要1秒。

我在考虑在不同的线程上同时运行OCR。因此,我尝试使用任务工厂:

decimal[] numbers;
Task.Factory.StartNew(() =>
{numbers = getNumbers(bitmap, dictionary1);});
string[] text;
Task.Factory.StartNew(() =>
{text = getText(bitmap, dictionary2);});
textBox1.Text = "" + text[0]; // nothing
但是我没有得到任何结果

那么在我的情况下可以实现多线程吗?我必须使用哪种方法

  • 任务工厂
  • 背景工作者
  • 线程
  • 还是别的什么
如果可能的话,您能否就如何使用您的方法给我一些建议,因为TaskFactory在我尝试使用它时失败了(如示例所示)

编辑:

好像

textBox1.Text = "" + text[0];
执行速度比

string[] text;
Task.Factory.StartNew(() =>
{text = getText(bitmap, dictionary2);});
这就是文本框字段为空的原因。。所以我在代码的最后移动了“textBox1.Text=”“+Text[0];”,最后得到了结果

编辑2:


好的,任务没有任何区别。。如果没有它们,我会得到相同的速度测试结果。

你正确地开始了任务,但你永远不会等待它们完成。你想做的事情和你想做的事情相似

Task[] tasks = new Task[2];
decimal[] numbers;
tasks[0] = Task.Factory.StartNew(() =>
   {numbers = getNumbers(bitmap, dictionary1);});
string[] text;
tasks[1] = Task.Factory.StartNew(() =>
   {text = getText(bitmap, dictionary2);});

Task.WaitAll(tasks);  // Wait for all parallel tasks to finish 
                      // before using their output.

textBox1.Text = "" + text[0];
可以找到更多示例代码


或者,您可以从任务返回值,而不是将其分配给变量,并在访问时使用该变量将等待任务完成并返回任务结果。

您的实际代码是否等待任务完成?任务没有任何区别。。没有它们我也能得到同样的速度测试结果。@Alex在没有看到新代码的情况下很难解释,但是您是否先启动所有任务,然后在它们全部运行后访问结果?如果您在开始下一个任务之前分别等待每个任务的结果,则会得到相同的效果。我完全按照您的示例中的方式启动它们:run1、run2、run3->>>WaitAll。然后我将收集到的信息放入文本框中。这还不是全部。第一次运行时没有任何错误,但是当我第二次运行代码时,我得到了“对象引用未设置为对象的实例”。(除非将麻烦的行放入单独的任务[])对不起,我的错误。最后,我知道是什么导致了我所说的这个错误。。性能提高了200+毫秒,这不是一个坏结果。。这一切都比一秒钟好;)