2013-02-20 76 views
1

好的,我有一個使用COM與Quickboos(QBFC)進行通信的應用程序。當我的應用程序關閉時,它會調用一種方法來確保在退出之前,與快速手冊建立的連接確實已關閉。如果我不調用此方法,則Quickbooks不允許用戶關閉其公司文件,因爲它可以識別與我的應用程序打開的會話,即使它不再運行。關於調試停止的WPF運行代碼

現在,我正在使用Quickbooks執行各種操作後關閉會話。我已經實現了AppDomain.UnhandledException,Dispatcher.UnhandledException和Application.Exit事件處理程序,以確保如果他們關閉應用程序或發生未處理的異常,同時我們使用Quickbooks打開會話,會話將關閉。

這很奇妙,但現在我們在開發過程中遇到問題,如果調試器在會話關閉之前停止,則quickbooks文件將永久鎖定,直到我們手動結束它的進程。任何未來與Quickbooks的通信都將在新的會話中進行。

當我點擊「停止」時,是否有可能在調試器完成殺死應用程序之前執行一些代碼,以便我們可以清理我們的會話?或者我們只是平靜地死在水中?我看了一下Environment類,並且我99%肯定它的'Exit'方法類似於調試器在你點擊'stop'時調用的,所以我猜測答案是'不'。但我認爲它不能傷害找出某些

+2

解決方案:請勿在Visual Studio中單擊「停止」。而是優雅地終止應用程序。 – 2013-02-20 19:02:12

+1

大聲笑,這是罰款和花花公子,除非意外發生,我們沒有任何其他方式來終止應用程序...加上作爲一個開發者,它是第二種性質的點擊停止按鈕或shift-f5 – 2013-02-20 19:03:30

+0

單擊停止就像通過任務管理器終止進程一樣,沒有任何變化,你將得到任何代碼在那一刻執行。我想你將不得不想出一些外部工具,即使應用程序沒有運行,也可以清理所有的東西。 – 2013-02-20 19:05:07

回答

2

我的建議是建立QBFC連接只有當它是必需的,並在操作完成後立即釋放它。

您可以嘗試的另一種方法是在應用程序啓動期間或在獲取新連接之前關閉先前的連接。如果涉及任何類型的會話標識符,請將其保留在文件中並使用該標識符關閉連接。

+0

好點,我沒有想過任何一種會話管理。我會仔細研究一下,看看我是否可以在應用程序啓動時清除任何打開的會話。值得注意的是,我們確實需要開幕式和閉幕式,但問題在於我們的邏輯是長期運行的,我們無法解釋中間可能發生的每一個意外情況,直到它發生了大聲笑 – 2013-02-20 22:36:14