2012-06-15 87 views
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> 

回答

2

您正忙於等待,導致UI線程阻塞,並在此過程中佔用大量CPU。相反,在Application_Startup中設置一個計時器,並在主窗口過期時打開它。

+0

感謝。你能夠發佈一些代碼示例嗎? – user589195

+0

另外,我應該在我的問題中提出的一件事是,我可能想要做其他事情,例如在啓動屏幕打開時預加載dll's – user589195

+0

如果可能,請從後臺線程執行此操作。 – zmbq

1

在'while'循環中,當你的UI線程被阻塞(因此等待運行你的動畫)時,你不能運行任何動畫。嘗試使用DispatcherTimer代替

+0

任何不使用標準Timer類的理由與DispatchTimer相反? – user589195

0

的最佳方式,並使用API​​是

SplashScreen splash = new SplashScreen("splashscreen.jpg"); 
    splash.Show(false); 
    splash.Close(TimeSpan.FromMilliseconds(2)); 
    InitializeComponent();