0

いくつかの背景...
ボタンがクリックされたときに視覚的なフィードバックを提供しようとしています...基本的には、ロード中のポップアップメッセージ(wpfポップアップコントロールを使用)です。問題は...私はUIスレッドにいて、同期コードでボタンのクリックとロジックが発生し、ポップアップが表示されるためです。ボタンのクリックでポップアップが表示され、いくつかのコードが実行されてから消えるようにしたかった (コードの実行中にポップアップが表示されるはずです)。

スレッド化でそれを実行できることはわかっていますが、それは現在のオプションではありません。時間の制約があり、アプリを「正しい方法」で修正する時間がありません。

それを「正しく」行うことについての通常のうめき声を得る前に...

  • 私はアプリを作成しませんでした。完全なオーバーホールなしで、パフォーマンス (および/またはパフォーマンスの認識)を改善しようとすることを任されただけです。
  • ある時点で、このアプリをリツールできることを望んでいます。今のところ、わずかな調整だけで済みます。
  • ViewModel はありません...コードは本当に UI に結合されています。(私が言ったように、私はアプリを正しくしませんでした)
  • さまざまな理由から、このシナリオではスレッド化を使用できません。これは、アプリ内の他の多くの部分と時間の制約を壊さない限りではありません。

このシナリオでこれを達成する方法はありますか (ところで... ViewModel がなく、Logic-UI の緊密な結合のために今は作成できません)?



ポップアップ コントロール

<Popup Name="popLoading" Placement="Center">
            <Border CornerRadius="10" Background="#ffffff">
                <Grid Width="400" Height="200">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition/>
                        <ColumnDefinition/>
                    </Grid.ColumnDefinitions>
                    <Image Grid.Column="0" Name="imgLoading" Source="/foo/Images/loading.png"  />
                    <TextBlock Name="txtLoading" Text="Retreiving data..."/>
                </Grid>
            </Border>
        </Popup>          

ボタンクリック

private void MyButton_Click(object sender, RoutedEventArgs e)
    {
        popLoading.IsOpen = true;
        
        //Do Some Stuff hopefully popup is showing up on the screen. 

        popLoading.IsOpen = false;
        
    }
4

1 に答える 1

1

UI をホストしている実行時間の長いプロセスのためにバックグラウンド ワーカーを作成するのは本当に面倒ですか?

私が WinForms で使用するもう 1 つの UI トリックは、何かがロードされていることを示す StatusBar を下部に配置することです (このプログラムが間違っていることを正確に実行していた時代に戻って)。

于 2012-05-21T18:15:36.130 に答える