1

WPF アプリケーションで非常に奇妙な問題に直面しています。私が行ったことを明確に説明しましょう。

選択した項目をチェック ボックスとして Datagrid を使用したので、ユーザーが [読み込み] ボタンを選択してクリックすると、レコードがデータベース サーバーに読み込まれます。この間、データベースサーバーにデータをロードしている間、画像を回転させ続けました。記録がたくさんあるので。

デフォルトでは、データ読み込みプロパティが表示に変更されている間、画像を非表示に保ちました。foreachステートメントの画像が表示されない場合、またはデフォルトで画像が表示されるが回転しない場合は...

Xaml コード...

<Button Content="Load" Height="23" HorizontalAlignment="Left" Margin="1042,83,0,0"
    Name="btnSaveData" Visibility="Hidden" VerticalAlignment="Top" Width="75"
    Cursor="Hand" Click="btnSaveData_Click" Foreground="Green" 
    Background="#FFB0D3D3" FontWeight="Bold" FontSize="14"/>
<Image Height="25" HorizontalAlignment="Left" Margin="1012,83,0,0" Name="imgSpin5"
    Stretch="None" RenderTransformOrigin="0.5,0.5" Visibility="Hidden"
    VerticalAlignment="Top" Width="24"
    Source="/LoadDataSource;component/Images/Spin5.png">
    <Image.RenderTransform>
        <RotateTransform x:Name="TransRotate" Angle="0"/>
    </Image.RenderTransform>
    <Image.Triggers>
        <EventTrigger RoutedEvent="Image.Loaded">
            <BeginStoryboard>
                <Storyboard TargetProperty="Angle">
                    <DoubleAnimation Storyboard.TargetName="TransRotate"
                        Storyboard.TargetProperty="Angle" By="360" 
                        Duration="0:0:1" AutoReverse="False" 
                        RepeatBehavior="Forever" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Image.Triggers>
</Image>

C# コード..

MessageBoxResult result = MessageBox.Show("Do you want to Load Selected items?",
   "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Information);
if (result == MessageBoxResult.Yes)
{
    imgSpin5.Visibility = Visibility.Visible;
    foreach (CType ctp in dgAttributes.ItemsSource)
    {
        if (ctp.IsSelected)
            imgSpin5.Visibility = Visibility.Visible;
    }
}
4

2 に答える 2

0

可視性の更新を呼び出しでラップしてDispatcher.Invoke、UIスレッドの先頭に強制foreachし、バックグラウンドワーカースレッドで実行することができます。

MessageBoxResult result = MessageBox.Show("Do you want to Load Selected items?", "Confirmation", MessageBoxButton.YesNo, MessageBoxImage.Information);
    if (result == MessageBoxResult.Yes)
    {
        imgSpin5.Visibility = Visibility.Visible;
        BackgroundWorker backgroundWorker = new BackgroundWorker();
        backgroundWorker.DoWork((s,e)=>{
            foreach (CType ctp in dgAttributes.ItemsSource)
            {
                if (ctp.IsSelected == true)
                {
                    Dispatcher.Invoke(() =>
                    {
                        imgSpin5.Visibility = Visibility.Visible;
                    });
                }
            }
        });
        backgroundWorker.RunWorkerAsync();

    }
于 2013-01-28T14:15:22.937 に答える
0

if (結果 == MessageBoxResult.Yes) {

                BackgroundWorker backgroundWorker = new BackgroundWorker();

                backgroundWorker.DoWork += delegate(object s, DoWorkEventArgs args)
                {
                    foreach (CType ctp in dgAttributes.ItemsSource)
                    {
                        if (ctp.IsSelected == true)
                        {

                            Dispatcher.Invoke(() =>
                            {
                                imgSpin.Visibility = Visibility.Visible;
                            });

                        }

                    }

                };
                backgroundWorker.RunWorkerAsync();

                MessageBoxResult results = MessageBox.Show("Sucessfully Loaded..!", "Confirmation", MessageBoxButton.OK);

                imgSpin.Visibility = Visibility.Hidden;
            }
于 2013-01-28T14:41:41.837 に答える