|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] Проблемы обработки события, генерируемого другим потоком |
|
.NET - [решено] Проблемы обработки события, генерируемого другим потоком
|
Пользователь Сообщения: 99 |
надо:
из формы Form1 запустить поток, который через промежутки времени меняет контролы Form1. сделано (думаю, что сделано): вторичный поток генерирует событие, которое запускает обработчик в Form1. Обработчик в стеке отладчика виден как принадлежащий Form1, но при попытке изменения контрола Form1 программа вылетает по ошибке. Ничего не понимаю. Что искать, как бороться? |
|
Отправлено: 14:57, 08-02-2012 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Barit, поясните, что значит
Цитата Barit:
|
|
------- Отправлено: 15:01, 08-02-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать Ошибка:
An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll Additional information: Cross-thread operation not valid: Control 'button_read_information' accessed from a thread other than the thread it was created on. здается, не может получить доступа к контролу Form1. но обработчик события запускается из Form1. Целенаправленно создавал его, чтоб уйти от этой ошибки. |
Отправлено: 15:06, 08-02-2012 | #3 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Barit, Объясните конкретнее что вы хотите сделать.
Цитата Barit:
Прикрепите свой проект |
|
------- Отправлено: 15:18, 08-02-2012 | #4 |
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать надеюсь нужного не выбросил, выжимка в прилагаемом текстовом файле
|
|
Отправлено: 15:34, 08-02-2012 | #5 |
В Поисках Истины Сообщения: 802
|
Профиль | Отправить PM | Цитировать Ну, судя по кускам кода, вы пытаетесь получить доступ к контролам "напрямую" из другого потока, что не правильно.
Почитайте про синхронизацию потоков. Тут есть один из вариантов доступа к контролам из потока. Думаю, разберетесь. |
------- Отправлено: 15:45, 08-02-2012 | #6 |
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать что ошибка из - за доступа к контролам из другого потока, понятно. Поэтому хочу замутить генерацию события из вторичного потока с обработкой в основном, чтобы избежать этой ошибки. Возможно ли сделать, чтобы обработчик был из основного потока?
О возможности использования *Invoke знаком, но по причине разветвленной и глубоко интегрированной ветки программы стараюсь избежать. Коряво получится. |
Отправлено: 16:13, 08-02-2012 | #7 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Как временное решение проблемы, ЧТО НЕ ПРАВИЛЬНО с точки зрения безопасности программ, можешь написать перед изменением
В таком случае исключение вызываться не будет при попытке доступа к контролам через другой поток. Если же все делать правильно, то только через Invoke. Пример, как я это реализовывал: delegate void SetControlValueCallback(Control oControl, string propName, object propValue); private void SetControlPropertyValue(Control oControl, string propName, object propValue) { if(oControl.InvokeRequired) { SetControlValueCallback d = new SetControlValueCallback(SetControlPropertyValue); oControl.Invoke(d, new object[] { oControl, propName, propValue }); } else { Type t = oControl.GetType(); PropertyInfo[] props = t.GetProperties(); foreach(PropertyInfo p in props) { if(p.Name.ToUpper() == propName.ToUpper()) { p.SetValue(oControl, propValue, null); } } } } Параметры: 1. Имя контрола 2. Имя свойства 3. Значение. |
------- Отправлено: 00:54, 09-02-2012 | #8 |
Пользователь Сообщения: 99
|
Профиль | Отправить PM | Цитировать модератор изменил название темы, исказив суть, прошу заменить на название типа:
"С# проблемы обработки события генерируемого другим потоком" и удалить это сообщение (либо сам удалю). |
Отправлено: 09:54, 09-02-2012 | #9 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Цитата Barit:
Цитата Barit:
|
||
------- Отправлено: 13:41, 09-02-2012 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
EventID - Уведомление Ист. события: HHCTRL Категория события: Отсутствует. Код события: 1903 | cleric1985_n | Устранение критических ошибок Windows | 7 | 27-11-2015 16:14 | |
BSOD - Имя события проблемы: BlueScreen.... | Titan2901 | Устранение критических ошибок Windows | 1 | 17-12-2009 14:23 | |
EventID - Источник события: SceCli, код события: 1202, предупреждение 0x534 | Michael | Устранение критических ошибок Windows | 3 | 28-01-2009 13:25 | |
EventID - [решено] Источник события:Windows Installer 3.1 Код события: 4379 | ozzik | Устранение критических ошибок Windows | 2 | 31-10-2007 15:41 | |
Категория события: Доступ к службе каталогов - Код события: 565 | Kostyl | Microsoft Windows NT/2000/2003 | 1 | 19-10-2005 08:33 |
|