2012-09-06 5 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 컨트롤을 사용하고 있습니다.

미리

는 UI 스레드에서 코드를 차단 실행하고 있기 때문에이 문제가 발생
+0

사용.예를 들어, BackgroundWorker – Reniuz

답변

1

에 감사합니다, 그래서 창을 다시 칠 수있는 기회가 없습니다.
백그라운드 스레드에서이 모든 작업을 수행해야합니다.

+0

을 사용할 수 있습니다. 고마워요 – Alex

0

시도해보십시오.

MainWindow 및 코드.

<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(); 
     } 
    } 

시작 화면 및 코드

,515,

공용 부분 클래스 스플래시 : 창 { 개인 정적 얼룩 얼룩 = 새로운 스플래시();

// 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); 
    } 

    } 

앱 클래스 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

관련 문제