2012-09-06 80 views
0

不幸的是,關於此問題在stackoverflow上沒有一個問題。至少,沒有我搜索時碰到的東西。加載內容時透明窗口

無論如何,當我將要討論的程序是構建。出現的第一個窗口就是登錄。當用戶輸入正確的登錄信息時,顯示主窗口。但是,在主窗口上有大量從互聯網收集的信息。

這會導致主窗口保持透明,如圖[1]所示,在一段合理的時間內。從互聯網收集的信息由一些xml以及來自MySQL數據庫的數據組成。

我有一個Window_Loaded事件,看起來像;

private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     method1(); 
     method2(1); 
     method3(); 
     . 
     . 
     . 
     //method6(); 
    } 

所以,很顯然,當我抵消某些方法和更少的再一次離開這個事件,窗口之前進入它保持透明的常態,變得越來越小。

但是,我想要做的是通常有窗口負載,然後也許有負載指示器用於通知內容被加載的用戶。

p.s我正在使用mahapps.metro控件。

預先感謝您

+0

使用。例如,你可以使用BackgroundWorker – Reniuz

回答

1

這是因爲你正在運行在UI線程阻斷的代碼,所以窗口不會有機會重新繪製。
您需要在後臺線程中完成所有操作。

+0

我會看看。謝謝 – Alex

0

試試這個

MainWindow and Code。

<Window x:Class="SplashScreenWithStatus.Window1" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="600" Width="800" Loaded="Window_Loaded"> 
    <Grid> 

    </Grid> 
</Window> 



public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      // Setting the status to show the application is still loading data 
      Splash.Loading("Connecting..."); 
      // Set to sleep to simulate long running process 
      Thread.Sleep(1500); 
      Splash.Loading("Retrieving...."); 
      Thread.Sleep(1500); 
      Splash.Loading("Success...."); 
      Thread.Sleep(1500); 
     } 

     private void Window_Loaded(object sender, RoutedEventArgs e) 
     { 
      Splash.EndDisplay(); 
     } 
    } 

閃屏和代碼

公共部分類飛濺:窗口 { 私有靜態飛濺飛濺=新飛濺();

// To refresh the UI immediately 
    private delegate void RefreshDelegate(); 
    private static void Refresh(DependencyObject obj) 
    { 
     obj.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, 
      (RefreshDelegate)delegate { }); 
    } 

    public Splash() 
    { 
     InitializeComponent(); 
    } 

    public static void BeginDisplay() 
    { 
     splash.Show(); 
    } 

    public static void EndDisplay() 
    { 
     splash.Close(); 
    } 

    public static void Loading(string test) 
    { 
     splash.statuslbl.Content = test; 
     Refresh(splash.statuslbl); 
    } 

    } 

app類XAML和代碼比UI線程其它加載數據

<Application x:Class="SplashScreenWithStatus.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    StartupUri="Window1.xaml" Startup="Application_Startup"> 
    <Application.Resources> 

    </Application.Resources> 
</Application> 

public partial class App : Application 
    { 
     private void Application_Startup(object sender, StartupEventArgs e) 
     { 
      Splash.BeginDisplay(); 
     } 
    } 
+0

感謝您的評論,這個解決方案正在工作,但我需要的是BackgroundWorker。 – Alex