我希望pictureBox1在UI(主线程)中显示CurrImage,同时在后台线程中修改CurrImage,这需要一些时间才能完成。当后台线程完成处理时,它应该将旧的CurrImage替换为pictureBox1中的这个新的。
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);
}
答案 0 :(得分:2)
简单:不要从后台线程访问PictureBox。
private int index;
private async void button4_Click(object sender, EventArgs e)
{ // ↑
index++;
if (index >= images.Count) index = 0;
var bitmap = (Bitmap)images[index];
pictureBox1.Image = bitmap;
pictureBox1.Image = await Task.Run(() =>
{ // ↑
return Iprocessing.Colour_style1(bitmap);
});
}