.net为什么需要在关闭程序时处理句柄

问题描述 投票:0回答:1

根据这个文档,我必须在关闭程序时处理句柄。

https://infosys.beckhoff.com/english.php?content=../content/1033/tcquickstart/html/tcquickstart_samplevisualbasicnet.htm&id=

 '------------------------------------------
    'wird beim Beenden des Programms aufgerufen
    'is activated when ending the program
 '------------------------------------------
Private Sub frmMachine_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
    Try
        ' Löschen der Notifications und Handles
        ' Deleting of the notifications and handles
        tcClient.DeleteDeviceNotification(hEngine)
        tcClient.DeleteDeviceNotification(hDeviceUp)
        tcClient.DeleteDeviceNotification(hDeviceDown)
        tcClient.DeleteDeviceNotification(hSteps)
        tcClient.DeleteDeviceNotification(hCount)
        tcClient.DeleteDeviceNotification(hSwitchNotify)

        tcClient.DeleteVariableHandle(hSwitchWrite)
    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try
    tcClient.Dispose()
End Sub

需要它吗?当我关闭程序时,是不是释放了内存?如果程序关闭然后重新打开,是否会多次出现句柄?

.net vb.net handle
1个回答
1
投票

这是关闭事件的形式,好吧,是的,如果您正在构建一个单独的表单应用程序也将在程序关闭但我认为可能是为了说明您清理后的一般原则用事做完了。

一般来说,如果程序即将退出,你就不需要进行这样的整理了。作为Raymond Chen puts it

该建筑正在拆除。不要费心去扫地,清空垃圾桶,擦掉白板。并且不要在建筑物的出口处排队,这样每个人都可以将他们的进/出磁铁移出。你所做的只是让拆迁队等你完成这些毫无意义的清理工作。

进程退出时将回收OS句柄。但是,如果您正在与外部硬件进行通信,那么删除句柄可能会更加清晰,如果这会将硬件置于已知良好状态(这确实会产生如果您的程序崩溃会导致什么情况发生的问题)

© www.soinside.com 2019 - 2024. All rights reserved.