2017-09-11 17 views
1

私はVSTO ExcelツールをC#で書いていますが、私はWPFフォームを使ってデータを表示しています。 WPFフォームは別のプロジェクトにありますが、Excel VSTOプロジェクトと同じソリューションです。 Excelで同じスレッドでWPFフォームを開くと、Excelに何らかの損害が発生し、奇妙なことが起きます。しかし、別のスレッドでWPFフォームを実行すると、すべてが完全に機能します。したがって、以下のコードはOKです。Excel VSTOプロジェクトからWPFアプリケーションを開く

if (app != null) 
{ 
// When click the button again and WPF form is opened already, bring it on top. 
    BringDatabaseToFront(); 
} 
else 
{ 
    t = new Thread(() => 
    { 
     app = new App(_synchronizationContext, currentCaller); 

     App.ResourceAssembly = app.GetType().Assembly; 

     app.InitializeComponent(); 

     app.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose; 

     /* Makes the thread support message pumping 
     * Dispecher is the Context of the WPF DB form */ 
     Dispatcher.Run(); 
    }); 

    // WPF MUST be on a single-threaded apartment 
    t.SetApartmentState(ApartmentState.STA); 
    t.Start(); 
} 

ツール(Excel)をシャットダウンすると問題が発生します。それは凍って永遠に凍っています。私はシャットダウンするWPFフォームをさまざまな方法を試してみましたが、すべてを動作し、閉じ一つだけです:

動作しますが、今、私は別の問題を抱えている
public void ShutDownAttempt() 
{ 
    Environment.Exit(0); 
} 

。ユーザーが他の複数のExcelブックを開いている場合、このコードは保存されていないデータを持っていても警告なしですべてを閉じます。だからこれは危険です。

メインアプリケーションから別のスレッドで実行されている場合、WPFアプリケーションをシャットダウンするのは簡単ではないようです。誰もがExcelからWPFフォームを使用する経験がありますか?

+0

私は、同様のタスクを持っており、それがWPFフォームを表示するための任意のスレッドを使用しなくてもかなりOKだろう。 VSTOアプリでWPFを使って正確に何をしていますか? – PetLahev

+0

私は比較的大きなデータベース(40,000 +レコード)を持っていますので、データのフィルタリングと選択にWPFフォームを使用し、選択したデータをExcel VSTOに送信してカーブフィッティングと分析を行います。ソリューションには、Excel VSTO、WPFデータベースフォーム、Entity Frameworkデータモデル、および異なるスレッドのオブジェクト間の通信を行うためのヘルパーモジュールなど、いくつかのプロジェクトがあります。 – v31

答えて

1

は、そのディスパッチャを使用してAppShutdown()メソッドを呼び出すようにしてください:

app.Dispatcher.Invoke(()=> { app.Shutdown(); }); 
+0

私はシャットダウンWPFモジュールに結合する同様の方法で試してみた: 'app.MainWindow.Closed + =(S2、E2)=> app.MainWindow.Dispatcher.InvokeShutdownを();' 'Dispatcher.CurrentDispatcher .BeginInvoke(新しいSystem.Action())=> app.Shutdown())) ' いずれも動作していません。おそらく、このモジュールはかなり大きく、さらにEntity Frameworkモジュールを持っているからです。おそらく、コンセプトをチェックするために空のWPFフォームを試してみる必要があります。 – v31

関連する問題