【发布时间】:2014-08-02 22:27:23
【问题描述】:
我正在尝试通过使用任务 (Parallel.foreach) 使我的代码更快。这是我更新的代码:
int intImageW, intImageH;
Bitmap bmpDest = new Bitmap(1, 1);
DateTime creationTime, lastWriteTime, lastAccessTime;
Parallel.ForEach(strarrFileList, strJPGImagePath =>
{
creationTime = File.GetCreationTime(strJPGImagePath);
lastWriteTime = File.GetLastWriteTime(strJPGImagePath);
lastAccessTime = File.GetLastAccessTime(strJPGImagePath);
using (Bitmap bmpOrig = new Bitmap(strJPGImagePath))
{
intImageW = bmpOrig.Width;
intImageH = bmpOrig.Height;
if ((intImageW > intImageH) && (intImageW > intLongSide))
{
intImageH = (int)((double)intImageH / ((double)intImageW / (double)intLongSide));
intImageW = intLongSide;
}
else if ((intImageH > intImageW) && (intImageH > intLongSide))
{
intImageW = (int)((double)intImageW / ((double)intImageH / (double)intLongSide));
intImageH = intLongSide;
}
else if ((intImageH == intImageW) && (intImageW > intLongSide))
{
intImageH = intLongSide;
intImageW = intLongSide;
}
else
mSplash("This photo (" + Path.GetFileName(strJPGImagePath) + ") is smaller than the desired size!");
bmpDest = new Bitmap(bmpOrig, new Size(intImageW, intImageH));
}
bmpDest.Save(strJPGImagePath, jgpEncoder, myEncoderParameters);
File.SetCreationTime(strJPGImagePath, creationTime);
File.SetLastWriteTime(strJPGImagePath, lastWriteTime);
File.SetLastAccessTime(strJPGImagePath, lastAccessTime);
});
但是,它给了我这个例外:
System.Drawing.dll 中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理 附加信息:对象当前正在其他地方使用。 如果有这个异常的处理程序,程序可以安全地继续。
异常发生在这一行:
bmpDest.Save(strJPGImagePath, jgpEncoder, myEncoderParameters);
感谢任何关于如何解决此问题的想法。
【问题讨论】:
-
当你发现自己用
new Bitmap(1, 1)这样的无意义对象初始化变量时,想:一定有更好的方法。
标签: c# parallel-processing task