Я не думаю, что это «механизм безопасности». Механизм безопасности, который действительно существует в WinForms (начиная с .NET 2.0 и далее), вызывает исключение, если вы находитесь в отладчике и пытаетесь получить доступ к пользовательскому интерфейсу из потока, отличного от соответствующего.
Вы уверены, что событие вообще не вызывается ? Это звучит очень странно. Если вы поставили точку останова на обработчик событий в отладчике, не будет ли эта точка останова поражена?
Чтобы ответить на ваш вопрос иначе, я бы не заставлял весь обработчик событий выполняться в определенном потоке. Может быть подписано более одного обработчика, и эти обработчики могут потребоваться для выполнения в разных потоках. Вместо этого я бы сделал обработчики событий сами по себе потокобезопасными - закодируйте их так, чтобы, если им нужно было выполнить какое-то действие в определенном потоке, они выполняли маршалинг обратно в поток (например, с помощью Control.BeginInvoke
и т. Д.).
В каком потоке происходит большая часть вашего доступа к сети? Я надеюсь, что это не или вовлеченных потоков пользовательского интерфейса (в противном случае вы можете получить неотвечающий пользовательский интерфейс). Это означало бы, что, если бы это работало раньше, вы, вероятно, уже выполняете соответствующую сортировку ... очень странно.
Если ничего из этого не помогло, не могли бы вы придумать короткую, но полную программу, которая демонстрирует проблему? Проще диагностировать конкретный код:)