在VB.Net中使用多线程保存图像的问题

在VB.Net中使用多线程保存图像的问题,.net,vb.net,multithreading,image,.net,Vb.net,Multithreading,Image,我已经编写了一个VB.Net程序,可以对图形文件进行选择性强度像素修改。它比我开始时快了很多(20秒vs 90秒),但处理多个图像的总时间仍然很慢。我通常运行64个12 MP图像,处理它们大约需要24分钟。我认为如果我使用多个线程,每个线程处理整个图像集的一个子集,我可以加快速度,所以我添加了多个后台工作人员。但是,当我使用Thread#.RunWorkerAsync()从程序运行多个线程时,保存的图像会出错。这是一个“好”的图像,在单个线程中运行: 下面是两个线程运行时相同映像的典型示例:

我已经编写了一个VB.Net程序,可以对图形文件进行选择性强度像素修改。它比我开始时快了很多(20秒vs 90秒),但处理多个图像的总时间仍然很慢。我通常运行64个12 MP图像,处理它们大约需要24分钟。我认为如果我使用多个线程,每个线程处理整个图像集的一个子集,我可以加快速度,所以我添加了多个后台工作人员。但是,当我使用Thread#.RunWorkerAsync()从程序运行多个线程时,保存的图像会出错。这是一个“好”的图像,在单个线程中运行:

下面是两个线程运行时相同映像的典型示例:

这些结果基本上是典型的,但“坏”图像在底部附近有一条干净的条纹,看起来是正确的;这通常不会出现在大多数图像上。
每个线程都使用自变量调用自己的子例程,因此不应该存在变量“交叉污染”。虽然这些结果是通过保存为JPG的图像获得的,但我通过保存为TIF文件的图像获得了相同的结果。我还尝试将图像分割成不同的目录,同时处理每个目录,每个目录都有自己的线程-结果相同。为了修改像素,我使用GetPixel/SetPixel来更改像素值,还使用LockBits来修改字节数组中的图像-两种方法的结果相同。一个线程好,两个+线程坏。我相信这是显而易见的,但我想不出来。如有任何建议,将不胜感激

如果应用程序在单线程中工作,那么线程之间可能存在一些干扰。一个可能的源位于文件级别。如果使用.net图形类从磁盘加载图像,则该图像文件将保持打开状态。在没有看到代码的情况下,我无法提出任何具体的建议,但这一点可能会导致您所看到的问题。

对不起,各位。在准备在这里发布的代码片段的过程中,发现了问题。一个我认为是独立的、不变的变量(更具体地说,一个转换矩阵)实际上在每个子程序中都被修改了。因此,一些像素转换是用错误的矩阵进行的,这导致了“坏”图像的斑点像素外观。只需使矩阵在不同的子例程之间独立,问题就消失了,现在我可以运行多个线程而不会出现问题。感谢您的评论-仅准备发布代码就让我找到了答案。

您需要发布多线程案例的相关代码才能获得好的答案。请提交您的代码,因为社区可以开始提出问题的想法。