Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C# Invoke работает не как надо, почему?

63K
21 апреля 2012 года
Wiktor_
21 / / 31.01.2012
надо обновлять контролы другого потока, использую стандартный код:


delegate void SetImageCallback(Control contrl, System.Drawing.Bitmap actImage);

this.SetImg(s1, global::myPr.Properties.Resources.s1_green); // обращение на изменение изображения

private void SetImg(Control contrl, System.Drawing.Bitmap actImage)
{
if (contrl.InvokeRequired)
{
SetImageCallback I = new SetImageCallback(SetImg);
cntrl.Invoke(I, new object[] { cntrl, actImage });
}
else contrl.Image = actImage;
}


Почему не обновляет, где нахомутал?
Аналогичный кусок кода для текстовых - прекрасно работает, а с изображениями - беда.

Добавлю, а такой код в основном потоке прекрасно работает ...
System.Drawing.Bitmap bm = global::WindowsFormsApplication1.Properties.Resources.s1_green;
pictureBox1.Image = bm;
63K
21 апреля 2012 года
Wiktor_
21 / / 31.01.2012
вот работающий код, нетрудно сравнить:

private void SetImg(PictureBox label, System.Drawing.Bitmap actImage)
{
if (label.InvokeRequired)
{
SetImageCallback I = new SetImageCallback(SetImg);
label.Invoke(I, new object[] { label, actImage });
}
else
{
label.Image = actImage;
}
}

(тихо сам с собою...)
40K
22 апреля 2012 года
D129
228 / / 18.04.2012
По видимому, код свойства .Image в PictureBox переопределен, а на уровне родителя (Control ) - нет.

Можно было еще и приведением типов справиться, а может даже и что-то вроде contrl.Refresh() после присвоения значения могло помочь.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог