【发布时间】:2014-02-19 02:02:48
【问题描述】:
我正在尝试设计一个程序,该程序使用外部 OCR 应用程序来翻转图像,直到其正面朝上。所有图像位置都保存在 files[] 中。
问题是,一次处理一个文件太慢了,无法处理我拥有的数万张图像。我需要启动 OCR 程序的多个实例来同时扫描多张图像。
我蹩脚的实现如下:
public Program(string[] files)
{
for(int i = 0; i < files.Length; i++)
{
ThreadStart start = () => {flip(files[i]);};
Thread t = new Thread(start);
t.Start();
if(i % 5 == 0)
{
t.Join();
}
}
}
该代码应该启动 5 个 OCR 程序实例。每五分之一,它会等待线程关闭,然后再继续。这应该充当缓冲区。
但是,发生的情况是重复文件被传递到 OCR 程序,而不是每次迭代都传递一个不同的文件。不同的线程正在抓取同一个文件。当 OCR 应用程序的不同实例处理同一个文件时,这会导致崩溃。
有谁知道发生了什么,或者知道我可以采取完全不同的方法吗?
【问题讨论】:
-
请注意,虽然这是许多其他问题的重复,但它是那些非常难以搜索的主题之一,所以我很乐意多次回答它以使其更容易找到未来:)
-
哇...我在@JonSkeet 之前回答了一个问题...我现在可以退休了! :)
标签: c# .net multithreading ocr