Я полагаю, что корень любых проблем, с которыми вы можете столкнуться, заключается в том, что любые обновления GUI должны выполняться в потоке пользовательского интерфейса. Вы не можете безопасно обновить пользовательский интерфейс из другого потока. Итак, в основном вам нужно сделать что-то вроде следующего (я просто меняю цвет фона в качестве примера, но вы можете делать все что угодно):
private void SomethingCalledFromBackgroundThread()
{
panel1.Invoke(new DoUpdatePanel(UpdatePanel), Color.Blue);
}
private delegate void DoUpdatePanel(Color aColor);
private void UpdatePanel(Color aColor)
{
panel1.BackColor = aColor;
}
============ Обновление =======>
@ Эш, ты неправильно описал мой ответ. Я не говорил звонить Invoke изнутри ProgressChanged. @Jean помните, что ReportProgress / ProgressChanged запускается асинхронно - вот почему вы делаете клон своего изображения. В этом нет необходимости, если вы используете Invoke из фонового потока, а не ReportProgress.