У меня странная тупиковая ситуация.После прилагается визуальная студия.Я видел 3 темы, которые застряли.
Тема 1:
if (SomeEvent != null)
SomeEvent(this, new SomeArg) --> Stuck
Тема 2:
if (SomeEvent2 != null)
SomeEvent2(this, new SomeArg2) --> Stuck
Основная тема:
public object (Delegate method, object[] args)
{
...
SynchronizationContext.Send(delegate(object state))
{
...
method.DynamicInvoke(args); --> Stuck
}
}
Эти три потока застряли, и когда я проверял их стеки вызовов, я не смог найти ни одного общего ресурса, например lock()
или Monitor.Wait()
.Я полагаю, что все они застряли на внешних вызовах.
Кроме того, я не могу сказать, что делает method.DynamicInvoke(args)
и каким должен быть этот метод.
Единственное, что я нашел, эточто подключенные обработчики событий могут вызвать взаимоблокировку.Тем не менее, поскольку VS показал мне, что именно здесь он застрял, а не в коде обработчика событий.Я думаю, что это может быть что-то еще.
С точки зрения приложения, я знаю, что это условие гонки, потому что приложение пыталось выполнить загрузку и выгрузку данных в одно и то же время, так что эта проблема довольно сложная.для воспроизведения.
Мой вопрос:
- Почему поток .NET зависает при возникновении события, это вообще возможно?
- Нужен ли поток основного интерфейса пользователябудет использоваться при поднятии события?
- Если действительно возможно, чтобы событие поднялось в тупик, как мне предотвратить это?
Спасибо