Я исправляю некоторые ошибки в существующем проекте С#. Я использую Visual Studio 2008 и 3.5 .NET Framework.
Приложение использует формы, и жизненный цикл приложения работал корректно. Я еще не делал никаких изменений, но в последнее время клиент начал вести себя странно. В первый раз приложение можно использовать без проблем, но если закрыть форму и открыть другую, объекты в этой форме удаляются. Код предназначен для КПК, и у нас есть обработчик событий для сканирования. Я считаю, что это очень странно, так как ничего из кода не изменилось. Может быть, это какой-то баг фреймворка?
Я пытался полностью исключить обработчики событий для события Closing, но возникает та же ошибка. Изменение способа размещения форм.
Создание формы
FormTEntreUbicaciones form = new FormTEntreUbicaciones(Movements.TREntreUbicaciones);
form.ShowDialog();
form.Dispose();
Создание события
if (Device.GetOSType2() == Device.OSType.WinMobile){
hDcd = new DecodeHandle(DecodeDeviceCap.Exists | DecodeDeviceCap.Barcode);
DecodeRequest reqType = (DecodeRequest)1 | DecodeRequest.PostRecurring;
dcdEvent = new DecodeEvent(hDcd, reqType, this);
dcdEvent.Scanned += new DecodeScanned(dcdEvent_Scanned);
}
Форма должна быть открыта, а все объекты в ней НЕ ДОЛЖНЫ быть удалены
Исключение:
System.ObjectDisposedException was unhandled
Message = "ObjectDisposedException"
ObjectName = ""
StackTrace:
at System.Windows.Forms.Control.InvokeHelper(Delegate method, Boolean fSynchronous, Object[] rgobjArgs)
at System.Windows.Forms.Control.Invoke(Delegate method)
at Datalogic.API.DecodeEvent.WaitForScan()
Какие-либо предложения? Спасибо!





Наконец, я нашел решение.
Выяснив, что пошло не так, я обнаружил, что событие SCAN сохраняется.
Я добавил переопределение закрытия:
this.Closing += MyClosedHandler;
И MyClosedHandlerEvent следующим образом:
//FIX MA 23.07.2019
protected void MyClosedHandler(object sender, EventArgs e)
{
if (dcdEvent.IsListening)
{
dcdEvent.StopScanListener();
}
if (hDcd != null)
{
hDcd.Dispose();
}
}
Обнаружена проблема с datalogic.api.dll. Используемый КПК - Skorpio x3.
Надеюсь, это поможет кому-то еще!
@EhsanMohammadi, пожалуйста, не меняйте исключение на
qoute... тогда это менее читабельноcode