【问题标题】:ShowDialog and Dispose problem with Forms..NET 3.5Forms..NET 3.5 的 ShowDialog 和 Dispose 问题
【发布时间】:2019-07-23 18:23:48
【问题描述】:

我正在修复现有 C# 项目中的一些错误。 我使用 Visual Studio 2008 和 3.5 .NET Framework。

应用程序使用表单,并且应用程序的生命周期正常工作。我还没有做任何改变,但客户最近开始出现奇怪的行为。 可以第一次使用该应用程序没有问题,但是如果一个表单关闭并且我们打开另一个表单,则该表单中的对象将被处置。 该代码用于 PDA,我们有一个用于 Scan 的 EventHandler。 我相信这很奇怪,因为代码没有任何改变。 也许是一些框架错误?

我试图完全消除 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()

有什么建议吗? 谢谢!

【问题讨论】:

  • @EhsanMohammadi 请不要将异常更改为qoute ...它的可读性不如code

标签: c# .net visual-studio-2008


【解决方案1】:

终于找到了解决办法。

在弄清楚出了什么问题后,我发现 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 存在问题。使用的 PDA 是 Skorpio x3。

希望这对其他人有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    相关资源
    最近更新 更多