我想pictureBox1在UI(主线程)中显示CurrImage,同时CurrImage将在后台线程中修改,这需要一段时间才能完成。当后台线程完成处理时,它应该将旧的CurrImage替换为pictureBox1中的新的CurrImage。UI线程和后台线程使用相同全局变量
1)我得到一个异常 2)我在UI线程中尝试了一个不同的图像变量,同时在后台线程中修改了CurrImage,它运行良好。
如何管理两个线程以在同一个全局变量上运行? 在此先感谢
private Image CurrImage; int index;
private void button4_Click(object sender, EventArgs e) {
index++;
if (index >= images.Count) index = 0;
CurrImage = images[index]; if (!bkGrndWker2.IsBusy) bkGrndWker2.RunWorkerAsync();
pictureBox1.Image = CurrImage;
}
private void bkGrndWker2_DoWork(object sender, DoWorkEventArgs e)
{
this.pictureBox1.Image = Iprocessing.Colour_style1((Bitmap)CurrImage);
}
帖子异常 – 2013-02-14 16:57:27
这是WPF或形式?这是.NET 4.5还是一些老版本?请使用问号标签 – GregC 2013-02-14 17:04:29
我正在使用.NET 4. 这是我得到的异常“System.Drawing.dll中发生类型'System.InvalidOperationException'的第一次机会异常” 实际上,如果我移动列表中的“图像”该索引使后台线程和主线程处理两个不同的图像,它工作正常。但是,如果我让两个线程每次点击下一个图像时处理相同的图像,它只会偶然成功。我试图从后台线程访问UI元素Invoke((Action)(()=> {this.pictureBox1.Image = Iprocessing.Colour_style1((Bitmap)CurrImage);})); – Basco 2013-02-15 04:37:43