Смехотворец
Зарегистрирован: 28 March 2005
Сообщения: 1133
Примеры кода: 1
|
RE[2]: Подвисает основной поток формы при работе с несколькими threads |
05 May 2008 13:41 |
|
|
|
|
private void ProceedEvent(int id)
{
if ( this.InvokeRequired)
{
cLog.WriteSQLLog(logPlaces.lpfrmMain, "Заход в обработку ИД");
dProceedEvent d = new dProceedEvent(ProceedEvent);
this.BeginInvoke(d, new object[] { id });
return;
}
Вот этод код мне не нравится, я если чесно с делегатами не разбирался, но вроде делегат у вас вызывается из функции делегата. Не рекурсия ли это)))).
Не, тут нормально все.
Рашифровываю: если требуется вызов с нити формы (т.е. мы зашли сюда НЕ с нити формы) подается команда на вызов с нити формы this.BeginInvoke(...) и выход из процедуры по return. Когда мы сюда попадаем с нити формы, this.InvokeRequired == false и выполняется основной блок кода. Я бы конечно через else написал, но на логику работы это не влияет, просто с else нагляднее.
Если бы была (бесконечная) рекурсия, было бы не зависание а вылет. Зависание -- следствие проблем с параллельным доступом.
Не приходило в голову, что если оно используется, то надо.
5 минут назад для подключения к vnp сети мне предложили скачать хитроумный клиент, который, естественно, не захотел работать под моей 64-х битной вислой. При этом стандатрная маздаевская служба маршрутизации и удаленного доступа поддерживает кучу политик удаленного доступа, всевозможные способы аутентификации и шифрования, различные параметры выдачи ip адресов и настроек сети, не требует никаких специальных клиентов и работает с любой более-менее свежой версией виндовз (а по религиозным праздникам и с нечетными версиями линукс).
Я это к тому, что далеко не всё используется, потому что оно "надо", бывают еще "интересно", "охота самовыражения", "лень думать/читать инструкцию", "я так хачу и пашли все в ж...у" и п.р. лейтмотивы, которые не всегда приводят к оптимальному решению. Программирую за еду.
|
|