本質的に、新しいスレッドでSystem.Windows.Forms.Application.Run()を実行する拡張プログレスバーであるC#COM DLLを作成しましたフォームを表示するダイアログを表示します。 VBAを使用してサードパーティのアプリケーションでそれを使用するには、何かのように実行します。C#COM DLLがVBAアプリケーションの終了を妨げている
Set pg = CreateObject("MyNS.MyProgressBar")
pg.ShowBar()
.
.
pg.Progress = 0.5
.
.
pg.ShutDownBar()
問題)(ユーザーがpg.ShutDownBar前に(終了>ファイル - 使用して、または類似の)アプリケーションを閉じることができるということですが達成された。ユーザーがこれを行うと、pg.ShutDownBar()は呼び出されません。その結果、アプリケーションのウィンドウは非表示になりますが、それでもタスクマネージャのプロセスには表示されます。
私の質問は: 親アプリケーションがシャットダウンしたかどうかを検出して、C#の進行状況バーのスレッドを中止する方法はありますか?
ダイアログスレッドを開始するメインスレッドでSystem.Windows.Forms.Application.ThreadExitとSystem.Windows.Forms.ApplicationExitを試しましたが、COM経由でオブジェクトにアクセスするときにこれらのイベントが発生しないようです.NETでオブジェクトを作成すると呼び出されます)。
誰かからアドバイスをいただけますか?
一般的なDoEvents()問題のようです。それを使用しないでください。 –
DoEvents()を呼び出すコードはありません...別のスレッドでダイアログを開始するのにApplication.Runを使用せず、別のスレッドでform.ShowDialog()を使用していましたが、ダイアログは基本的にフリーズしています...なぜダニー? – MineR
アプリケーション終了イベントでプログレスバーオブジェクトを 'Nothing'に設定するとどうなりますか? –