为了账号安全,请及时绑定邮箱和手机立即绑定

Forms..NET 3.5 的 ShowDialog 和 Dispose 问题

Forms..NET 3.5 的 ShowDialog 和 Dispose 问题

C#
千巷猫影 2023-07-09 16:15:55
我正在修复现有 C# 项目中的一些错误。我使用 Visual Studio 2008 和 3.5 .NET Framework。该应用程序使用表单,并且应用程序的生命周期正常运行。我还没有做任何改变,但是客户最近开始经历奇怪的行为。第一次使用该应用程序可以没有问题,但是如果关闭一个表单并打开另一个表单,则该表单中的对象将被释放。该代码适用于 PDA,我们有一个用于扫描的事件处理程序。我认为这很奇怪,因为代码没有任何改变。也许这是一些框架错误?我试图完全消除 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()有什么建议么?谢谢!
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

最后,我找到了解决方案。


在弄清楚出了什么问题之后,我发现 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。


希望这会帮助别人!


查看完整回答
反对 回复 2023-07-09
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信