Важно убедиться, что вы манипулируете пользовательским интерфейсом из правильного потока. Я рекомендую использовать следующее расширение metadds
public delegate void EmptyHandler();
public delegate void ParamHandler(params object[] args);
public static void SafeCall(this Control control,
ParamHandler method, params object[] args)
{
if (control.InvokeRequired)
{
control.Invoke(method, args);
}
else
{
method(args);
}
}
public static void SafeCall(this Control control, EmptyHandler method)
{
if (control.InvokeRequired)
{
control.Invoke(method);
}
else
{
method();
}
}
тогда вы можете вызвать соответствующий метод из неправильного потока, как это
{ ... background thread
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.SafeCall(SetImage, e.Result);
}
}
, который вызывает метод SetImage(Bitmap bitmap)
с соответствующим потоком.