2013-07-21 60 views
3

如何在10秒後重定向到新的WPF Window?我試圖使用Windows.Hide()代替當前的WindowWindows.Show()代替另一個Window,但這不起作用。10秒後重定向到新的wpf窗口?

+0

你可以把你的代碼轉換成你的問題? –

+0

我想在10秒後從MainWindow.xaml重定向到Window1.xaml。我在下面編寫了代碼。 Window1 w = new Window1(); InitializeComponent(); System.Threading.Thread.Sleep(10000); this.Hide(); w.Show(); – CoolDiva

+0

在上面的情況下,MainWindow根本不出現,而Window1在10秒後出現 – CoolDiva

回答

2

您的MainWindow沒有機會完成其構建。你可以改變你的代碼,或者類似的東西...

public MainWindow() 
    { 
     InitializeComponent(); 
     Loaded += MainWindowLoaded; 
    } 
    void MainWindowLoaded(object sender, RoutedEventArgs e) 
    { 
     Loaded -= MainWindowLoaded; 
     Window1 window1 = new Window1(); 
     window1.Dispatcher.BeginInvoke((SendOrPostCallback) delegate 
      { 
       Thread.Sleep(3000); 
       Hide(); 
       window1.Show(); 
      }, new object[] {null}); 
    } 

這讓第一個窗口完成它的構建。

+0

謝謝Garry,這很好,唯一的問題是我在我的MainWindow頁面上有一個動畫,因爲Thread.Sleep()不工作。爲此的東西。 – CoolDiva

+0

是的,您可能希望將代碼放入此處並將其移入背景工作。最好創建一個關於wpf背景工作者和動畫的全新問題,因爲這個問題是關於重定向的,這是一個很好的問題。 –

3

我用這個定時器:

public partial class MainWindow : Window 
{    
    System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();        

    public MainWindow() 
    { 
     InitializeComponent(); 

     dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); 
     dispatcherTimer.Interval = new TimeSpan(0, 0, 5); 
     dispatcherTimer.Start();         
    } 

    private void dispatcherTimer_Tick(object sender, EventArgs e) 
    { 
     Window1 w = new Window1(); 
     this.Hide(); 
     w.Show(); 

     dispatcherTimer.Stop();    
    } 
}