2011年7月10日 星期日

VB 轉Excel檔案,如何收回Application資源

要改看看直接全部釋放的作法
改成每次new 一個 App
然後執行完畢該 App 釋放資源


資料匯出EXCEL後,EXCEL程式並未關閉(至Windows工作管理員查看,EXCEL.EXE還在)


可以釋放資源˙,但目前測試一樣是全部釋放,
沒辦法說找到關鍵的Excel去釋放
如果使用者有自己開起不再系統下的Excel
將會一起被關掉

XlsClose()呼叫的時機為何,
目前掛在系統下,
某個Form頁籤關閉後執行


=========================================
轉Excel檔案,何時應該收回Application資源,
 用的方法好像就算關閉Excel,系統管理員上也不會close掉
 要查一查

 嘗試從程式關閉上,一併去關閉Excel

或是說使用者只要開一個APP,就開一個APP給他
而不是說全部都放再同一個APP

大概知道了
應該是變數宣告的時候,
因為我把toXls的東西放在Module
他只會宣告一次
我關掉的
永遠是找那個第一次,
所以後面的就會一直找不到程序去關掉

變成說我每次轉檔的時候
都要透過宣告變數的方式
而不是公用變數
這樣就能有效的關閉Excel APP
===============================================
這方式不太確定會不會有什麼風險~

    '查找資源,並且釋放
        Call KillProcess("EXCEL")



 '以程序名稱,查找還剩下哪些資源尚未釋放
    Private Sub KillProcess(ByVal ProcName As String)
        Dim thisProc As System.Diagnostics.Process
        Dim allRelationalProcs() As Process = System.Diagnostics.Process.GetProcessesByName(ProcName)
        For Each thisProc In allRelationalProcs
            Try
                If Not thisProc.CloseMainWindow() Then
                    thisProc.Kill()
                End If
            Catch ex As Exception
                MsgBox(ex.GetBaseException.ToString)
            End Try
        Next
    End Sub

    '關閉 Excel ,釋放所有 APP 資源
    Private Sub NAR(ByVal o As Object)
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(o)
        Catch e As Exception
            MsgBox("關閉 Excel, 發生例外事件!!")
        Finally
            o = Nothing
        End Try
    End Sub

沒有留言:

張貼留言