Я хочу, чтобы pictureBox1 отображал CurrImage в пользовательском интерфейсе (основной поток), и в то же время CurrImage должен быть изменен в фоновом потоке, для завершения которого требуется некоторое время. Когда обработка завершена фоновым потоком, она должна заменить старый CurrImage на новый в pictureBox1.UI thread and background thread use same Глобальная переменная
1) Я получаю исключение 2) Я попробовал другую переменную изображения в потоке пользовательского интерфейса при изменении 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);
}
Сообщение исключение –
Является ли это WPF или формы? Это .NET 4.5 или какой-то более старый вариант? Пожалуйста, используйте теги вопросов – GregC
Я использую .NET 4. Это исключение, которое я получаю «Первое случайное исключение типа« System.InvalidOperationException »произошло в System.Drawing.dll« Фактически в списке «изображения», если я смену индекс, так что фоновый поток и основной поток обрабатывают два разных изображения, он отлично работает. Но если я делаю оба потока обрабатывать одни и те же изображения каждый раз, когда я нажимаю дальше, он удастся только случайно. Я попытался также получить доступ к элементам пользовательского интерфейса из фонового потока Invoke ((Action) (() => {this.pictureBox1.Image = Iprocessing.Colour_style1 ((Bitmap) CurrImage);})); – Basco