0

アプリケーションがオフになって何かを実行しているときにフェードインしたいスプラッシュ画面があります。完了すると、一定の時間が経過すると、スプラッシュ画面が閉じてメイン画面が読み込まれます。

取得している問題は、時間が経過したかどうかを確認するためにループしているときに、ストーリーボードがスプラッシュ画面でフェードインするように処理されていないように見えることです。

読んだ後、別のスレッドでスプラッシュ画面を開始する必要があると思いますか?

コードは次のとおりです。

public partial class App : Application
    {
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            MySplashScreen splash = new MySplashScreen();
            splash.Show();
            Stopwatch sw = new Stopwatch();
            sw.Start();
            while (sw.Elapsed.TotalSeconds < 10)
            {
            }
            splash.Close();
            MainWindow mw = new MainWindow();
            mw.Show();

        }

    }

問題は、アニメーションを追加するときです。whileループでスタックしているため、フェードにプロセッサを適用しないようなものです。

<Window x:Class="Splash_Demo.MySplashScreen"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Height="550" Width="900" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" WindowStyle="None" ShowInTaskbar="False" Background="Transparent" AllowsTransparency="True" Opacity="0">
    <Window.Triggers>
        <EventTrigger RoutedEvent="Window.Loaded">
            <BeginStoryboard>
                <Storyboard>
                    <DoubleAnimation Duration="00:00:03" Storyboard.TargetProperty="Opacity" To="1" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Window.Triggers>
    <Canvas Height="498" Width="839">
        <Canvas.Background>
            <ImageBrush ImageSource="C:\Users\Ash\Downloads\XactSplash.png"/>
        </Canvas.Background>
        <Label Canvas.Left="291" FontFamily="Algerian" Canvas.Top="413" Name="Customer" Height="43" Width="185" HorizontalContentAlignment="Left" VerticalContentAlignment="Center"/>
        <Image Canvas.Left="500" Canvas.Top="165" Height="164" Name="image1" Stretch="Fill" Width="211" Source="C:\Users\Ash\Downloads\Zerix.bmp" />
        <Label Canvas.Left="191" Canvas.Top="376" FontSize="8" Content="Label" Height="19" Name="lblYear" Width="30" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" />
    </Canvas>

</Window>
4

3 に答える 3

2

あなたは忙しいです-待っていて、UIスレッドをブロックし、その過程で多くのCPUを使用しています。代わりに、Application_Startupでタイマーを設定し、有効期限が切れたらメインウィンドウを開きます。

于 2012-06-15T09:22:25.027 に答える
1

'while'ループでは、UIスレッドがブロックされているため、アニメーションを実行できません(したがって、アニメーションの実行を待機しています)。DispatcherTimer代わりに使用してみてください

于 2012-06-15T09:58:34.947 に答える
0

最良の方法とAPIの使用は

  SplashScreen splash = new SplashScreen("splashscreen.jpg");
  splash.Show(false);
  splash.Close(TimeSpan.FromMilliseconds(2));
  InitializeComponent();
于 2012-12-12T20:08:09.177 に答える