提问人:Jack.Hou 提问时间:12/7/2020 更新时间:12/7/2020 访问量:123
C# Windows 窗体 - 正常将过滤器应用于图像,但使用线程 [duplicate] 获得 NullReferenceException
C# Windows Form - Apply filter to image normally but got NullReferenceException using Thread [duplicate]
问:
这个问题在这里已经有答案了:
在 C# 的循环中捕获变量 (11 个答案)
创建任务时列出索引超出范围异常 (3 个答案)
在 C# 中正确使用 Parallel for 循环? (1 个答案)
2年前关闭。
我正在对多个图像应用滤镜,它运行良好,但速度非常慢。
(注意:图像、过滤器、filter_size、div 已加载并分配)
for (int i = 0; i < 5; i++)
out[i] = MyFiltering((Bitmap)images[i], filter, filter_size, div);
因此,我尝试为每个图像过滤使用一个线程来加速,如下所示:
for (int i = 0; i < 5; i++)
{
FilterThread[i] = new Thread(() => {out[i] = MyFiltering((Bitmap)images[i], filter, filter_size, div)}
FilterThread[i].IsBackground = true;
FilterThread[i].Start();
}
我尝试了不同的方法(例如,ThreadPool、Task.Factory.StartNew),但总是在 MyFiltering 中为输入 img(即 images[i])获取 NullReferenceException,这绝对不是 NULL!
有人有想法吗?
答: 暂无答案
评论
images
i
被 lambda 捕获,因此它被推进到未初始化的元素,该元素现在由该线程引用,而不是预期的线程。参见 J. Steen 的答案。iCopy