我已經創建了一個C#COM DLL,它本質上是一個增強的進度條,它在新線程上運行System.Windows.Forms.Application.Run()以顯示錶單與對話。要使用VBA使用它在第三方應用程序,你做這樣的事情:C#COM DLL阻止VBA應用程序退出
Set pg = CreateObject("MyNS.MyProgressBar")
pg.ShowBar()
.
.
pg.Progress = 0.5
.
.
pg.ShutDownBar()
的問題是,用戶能夠BEFORE pg.ShutDownBar關閉(使用文件 - >退出,或類似)的應用程序()到達了。如果用戶這樣做,pg.ShutDownBar()永遠不會調用,結果是儘管應用程序的窗口是隱藏的,它仍然出現在任務管理器進程中。
所以我的問題是: 是否有某種方法來檢測父應用程序是否已關閉,然後中止在c#中的進度條線程?
我已經嘗試System.Windows.Forms.Application.ThreadExit和System.Windows.Forms.ApplicationExit在啓動對話框線程的主線程,但這些事件似乎不會通過COM訪問對象時引發(儘管他們被稱爲當我在.NET中創建對象)... ...
任何人都可以提供一些建議嗎?
聽起來像一個典型的DoEvents()問題。不要使用它。 – 2012-01-18 04:03:40
沒有任何代碼調用DoEvents()...我試圖不使用Application.Run在單獨的線程上啓動我的對話框,而是在單獨的線程上使用form.ShowDialog(),但隨後對話框基本凍結...不知道爲什麼? – MineR 2012-01-18 04:06:34
如果在應用程序退出事件中將進度條對象設置爲「Nothing」,會發生什麼情況? – 2012-01-18 04:45:44