Я пытаюсь распараллелить операцию с изображением, используя приведенный ниже код, но получаю ошибку One or more errors occurred
.
Заглянув во внутреннее исключение, я вижу, что произошла ошибка {"Object is currently in use elsewhere."}
.
Примечание: CoverImage
и SecretImage
- это Bitmap
s
Parallel.For(0, CoverImage.Width, x =>
{
for (int y = 0; y < CoverImage.Height; y++, SecretImageHeight++)
{
Color coverImagesPixel = CoverImage.GetPixel(x, y);
Color secretImagesPixel = SecretImage.GetPixel(SecretImageWidth, SecretImageHeight);
int r = (coverImagesPixel.R & coverImageMask) + ((secretImagesPixel.R >> shift) & secretImageMask);
int g = (coverImagesPixel.G & coverImageMask) + ((secretImagesPixel.G >> shift) & secretImageMask);
int b = (coverImagesPixel.B & coverImageMask) + ((secretImagesPixel.B >> shift) & secretImageMask);
StegoImage.SetPixel(x, y, Color.FromArgb(255, r, g, b));
}
SecretImageHeight = 0;
SecretImageWidth++;
}
);
Я пробовал использовать такой мьютекс:
mutex.WaitOne();
StegoImage.SetPixel(x, y, Color.FromArgb(255, r, g, b));
mutex.ReleaseMutex();
Но все равно безрезультатно (я получаю ту же ошибку).
SecretImage
, либоCoverImage
не являются потокобезопасными. - person flindeberg   schedule 18.06.2015