2011-09-10 5 views
4

を待ちます操作を実行しているロングで行われた後、操作を実行すると、私はモデルダイアログウィンドウWPFはロングに入る前に)私はShowDialogの(のように別のスレッドで、この待機ウィンドウを表示する([ウィンドウを待って)私は長い操作を実行したい場合は、私がモデルダイアログウィンドウを表示したい</p> <p>を</p> <p>をウィンドウ

が表示されます、私はこのモデルダイアログウィンドウ

を閉じます私の代わりに別のスレッドでウィンドウを作成するのではなく、我々は単にあの中にコードの実行に長い移動することができます知っていますTherスレッドしかし、私のコードでこれの影響は重いです。

私にすべてのこの

+0

あなたが長いランニング動作時に使用するアプリケーションのUIの残りの部分にアクセスしてからユーザーを防ぐためにしようとしていますか? –

答えて

6

初のソリューションを提案してください、私のアドバイスは、UIスレッドから「長時間実行される操作」を削除することです。

これは、あなたがしようとしていることを議論している記事です。

http://eprystupa.wordpress.com/2008/07/28/running-wpf-application-with-multiple-ui-threads/

次のコードが提示されています

Thread thread = new Thread(() => 
    { 
     Window1 w = new Window1(); 
     w.Show(); 

     w.Closed += (sender2, e2) => 
     w.Dispatcher.InvokeShutdown(); 

     System.Windows.Threading.Dispatcher.Run(); 
    }); 

thread.SetApartmentState(ApartmentState.STA); 
thread.Start(); 

あなたは新しいスレッドでUIメッセージとイベントを処理する新しいディスパッチャを作成します。添付されたClosedイベントハンドラは、フォームを閉じた後に作成されたディスパッチャが継続して実行されないようにし、アプリケーションを「永遠に」実行しないようにします。

8

ShowDialog()のようなWinFormsの匂いのソリューションを避けることをお勧めします。 すぐにご覧になれますWPF ToolKit BusyIndicator WPFとXAMLの機能と柔軟性を活用することができます。

BusyIndi​​catorを使用すると、アプリケーション がビジー状態のときにユーザに知らせるのが容易になります。関連するコンテンツを BusyIndi​​catorコントロールのインスタンスにラップし、 any 長時間実行中のプロセスの間にIsBusyプロパティをTrueに切り替えます。

enter image description here

あなたはUIのレイアウトを完全に制御を持っているし、自分のDataTemplateを定義することができます:多くのため

<extToolkit:BusyIndicator IsBusy="True" DisplayAfter="0"> 
     <extToolkit:BusyIndicator.BusyContentTemplate> 
      <DataTemplate> 
       .... 

参照Extended WPF Toolkit BusyIndicatorをそれはカスタム例えば、ウィンドウを待って構築することができます

例とダウンロード。

0

ソリューションを提供いただき、ありがとうございます。

実際に私は.Net 3.5フレームワークを使用しています。理由はビジーインジケータを使用できません。

私がしたことは:最初の解決策として、私は長時間実行しているプロセスのバックグラウンドワーカーを作成し、ShowDialog()をWaitウィンドウに使用しました。私の目標

本部Milind達成するために、私に可能な方法を提供するためのあなたのすべてに

おかげ

+1

拡張WPFツールキットのBusyIndi​​catorは、.NET 3.5でも使用できます。 –

+0

@Milind:Brian Lagunas右、BusyIndi​​catorを3.5でも使用できます – sll

関連する問題

 関連する問題