2

WPF の Window.IsEnabled プロパティについて質問があります - C# 5.0、.NET4.5。

次のシナリオがあります(簡略化):

1) ボタン付きフォーム

2) ユーザーが長時間の計算操作をトリガーする (DB からデータを取得する)

3) ユーザーは新しいデータとやり取りできる

私はこれを次の方法で実装しました:

1) Click ハンドラーは (ユーザーの操作のために) ウィンドウを無効にし、操作を非同期的に開始します (これは同期的に行うことができますが、問題ではありません)。

2)非同期操作が完了すると、ウィンドウは有効になります( myWindowInstance.IsEnabled = trueを介して)

そして私の問題は:

myWindowInstance.IsEnabled = true には約 20 秒かかります。フェッチされたデータのウィンドウに dataGridView があることに注意する必要があります。ただし、勝利を無効にして再度有効にしない限り、これには約 1 秒かかります。もう 1 つの興味深い点は、小さなローカル DB に接続すると、win.IsEnabled セッターがすばやく実行されることです。これとは逆に、リモートの巨大な DB を使用する場合、前述のように、この操作には 20 秒かかります。どちらの場合も、100 行だけをフェッチします。

単純なセッターに非常に時間がかかる理由を知っている人はいますか?

アイデアをありがとう!

4

1 に答える 1

1

ウィンドウを無効にする代わりにできることの 1 つは、他のコントロールの上に挿入した半透明の Rectangle を有効/無効にすることです。ユーザーは何もクリックできません。完了したら、無効にするか、Visibility プロパティを Hidden に設定します。

<Window>
    <Grid>
        <TextBox Text="Hello" HorizontalAlignment="Left" VerticalAlignment="Top" ></TextBox>
        <Rectangle Fill="DarkGray" Opacity="0.5" />
    </Grid>
</Window>

問題が発生するまでにかなりの時間がかかるため、Visual Studio の [分析] メニューを使用してアプリケーションをプロファイリングする必要があります。

于 2013-04-08T01:59:32.127 に答える