Я создал невидимый объект From
Звучит как проблема.Использование InvokeRequired является опасным анти-паттерном.Это особенно смертоносно с VB6, во время его выполнения плохо работает обработка потоков.Вы знаете , что код вызывается из рабочего потока, используйте InvokeRequired только для проверки того, что форма, которую вы используете для синхронизации, находится в надлежащем состоянии, чтобы сделать это правильно:
if (!myForm.InvokeRequired()) {
throw new InvalidOperationException("Synchronization window not created");
}
delOnMessage myDelegate = new delOnMessage(FireMessageReceivedEvent);
myForm.BeginInvoke(myDelegate, new object[] { null, null });
Хорошие шансы, что это исключение вызовет, создать невидимую форму не так просто.Вы можете принудительно создать свойство Handle формы, прочитав его свойство Handle.Или переопределив его метод SetVisibleCore (), чтобы сохранить форму невидимой:
protected override void SetVisibleCore(bool value) {
if (!this.IsHandleCreated) {
this.CreateHandle();
value = false;
}
base.SetVisibleCore(value);
}
Однако очень важно, чтобы вы вызывали метод Show () этой формы в главном потоке.Это все равно не будет работать правильно, если вы создадите форму в своем рабочем потоке.Нет простого способа проверить это в вашем коде.Используйте отладчик и окно Debug + Windows + Threads, чтобы убедиться в этом.
И последнее, но не менее важное: предпочитайте BeginInvoke () вместо Invoke ().Это имеет гораздо меньшие шансы создания тупика.Это может вызвать проблемы само по себе, однако, ваш рабочий поток может нуждаться в регулировании, чтобы предотвратить его заполнение основного потока запросами на вызов.