Вызовите (), блокируется

вы также можете попробовать это

INSERT INTO "user" ("username", "password_hash", "first_name", "last_name") VALUES( 'Foo',MD5('54321'),'Foo','Bar' );

18
задан EricSchaefer 20 December 2008 в 12:28
поделиться

4 ответа

Вызовите ожидает, пока событие не обрабатывается в потоке GUI. Если Вы хотите, чтобы это было асинхронным использованием BeginInvoke ()

28
ответ дан 30 November 2019 в 07:23
поделиться

Наиболее вероятный ответ (мертвая блокировка) был уже предложен.

Другой способ моделировать это поведение состоит в том, чтобы сократить количество потоков пула и портов завершения IO; Вы не звонили ThreadPool.SetMaxThreads(...) случайно?

0
ответ дан 30 November 2019 в 07:23
поделиться

Мертвая блокировка, возможно? Вы удостоверяетесь, что события никогда не запускаются при содержании блокировки?

Могут Вы для наблюдения этого с присоединенным отладчиком? Если так, заставьте его заморозиться и затем нажать кнопку "паузы" - и видеть то, что делает поток UI.

Примечание, которые, если Вы можете сойти с рук BeginInvoke вместо, Вызывают, жизнь, немного легче, поскольку это не заблокируется.

Также примечание, что Вам не нужен "новый EventHandler", укусило - всего

Invoke((EventHandler) MyEventHandler, sender, e);

, должен быть прекрасным.

6
ответ дан 30 November 2019 в 07:23
поделиться

От наблюдения этого вопроса я вижу, что Вы не собираетесь получать любые ответы, которые сразу решат проблему, поскольку большинство из них требует, чтобы Вы отладили событие, и это происходит настолько нечасто, что это почти невозможно. Так, позвольте мне предложить, чтобы Вы внесли некоторые изменения кода, которые могли бы помочь Вам идентифицировать преступника в поле.

я предлагаю, чтобы Вы создали статический класс, единственная цель которого состоит в том, чтобы обработать все Ваш Вызывала вызовы. Я предположил бы, что этот класс имеет метод, который берет на себя Управление, (для вызова Вызывают на) Действие (метод, который будет вызван), и описание (содержащий информацию, которую необходимо было бы знать для идентификации метода и что это собирается сделать).

В теле этого метода, я предлагаю, чтобы Вы ставили в очередь эту информацию (метод, описание) и сразу возвратились.

очередь должна быть обслужена единственным потоком, который появляется, действие/сообщение разделяют на пары очередь, записывает текущее время и описание Действия в паре свойств, и затем Вызывает () Действие. Когда Действие возвращается, описание и время очищено (Ваш DateTime может быть nullable, или установить его на DateTime. Max). Отметьте, так как все Вызывает, упорядочиваются по одному на поток UI, Вы ничего не теряете путем обслуживания очереди единственным потоком здесь.

Теперь, вот то, где мы переходим к сути дела этого. Наш класс Вызова должен иметь Систему heartbeat. Поточная обработка. Поток таймера. Это не должно быть объектом windows.forms.timer, поскольку это работает на потоке UI (и был бы заблокирован, когда ui заблокирован!!!).

задание этого таймера состоит в том, чтобы периодически посмотреть в то время, когда текущее Действие было Вызвано. Если DateTime. Теперь - BeginTime> X, таймер биений решит, что это Действие заблокировалось. Таймер биений ЗАРЕГИСТРИРУЕТСЯ (однако, Вы регистрируетесь), ОПИСАНИЕ, зарегистрированное для того Действия. У Вас теперь есть запись того, что происходило в то время Ваш запертый UI и может отладить его лучше.

я знаю, что это не решение Вашей проблемы, но по крайней мере путем выполнения этого можно получить хорошую идею о том, что продолжается в то время, когда Вы заблокированы.

3
ответ дан 30 November 2019 в 07:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: