Praveen Kartik
Praveen Kartik

Reputation: 3

Splash screen appears everytime the project's starting window is invoked..

I have implemented a splashscreen for my project, it works well as desired.. but in my project i have an option of logout for user,this displays start page where a different login is provided(which is the starting screen..i.e, "chooselogin.xaml"). So when the user clicks on "choose a different login" while he already selected one in the application.. again the splashscreen appears, which is not required and looks odd.

the following code is what i think leading to problem... guys

public partial class Chooselogin : Window
 {
     public Chooselogin()
     {
         new SplashWindow().ShowDialog();
         InitializeComponent();
     }

......

This code is my "App.xaml"..

<Application x:Class="WpfApplication1.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
 StartupUri="Chooselogin.xaml">
       <Application.Resources>
           <ResourceDictionary Source="/Themes/ExpressionDark.xaml"/>
       </Application.Resources>

The splash screen code is as follows..

public partial class SplashWindow : Window
    {
        Thread loadingThread;
        Storyboard Showboard;
        Storyboard Hideboard;
        private delegate void ShowDelegate(string txt);
        private delegate void HideDelegate();
        ShowDelegate showDelegate;
        HideDelegate hideDelegate;

        public SplashWindow()
        {
            InitializeComponent();
            showDelegate = new ShowDelegate(this.showText);
            hideDelegate = new HideDelegate(this.hideText);
            Showboard = this.Resources["showStoryBoard"] as Storyboard;
            Hideboard = this.Resources["HideStoryBoard"] as Storyboard;
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            loadingThread = new Thread(load);
            loadingThread.Start();
        }
        private void load()
        {
            Thread.Sleep(1000);
            this.Dispatcher.Invoke(showDelegate, "Loading assets...please wait");
            Thread.Sleep(2000);
            //do some loading work
            this.Dispatcher.Invoke(hideDelegate);

            Thread.Sleep(2000);
            this.Dispatcher.Invoke(showDelegate, "Loading profiles..");
            Thread.Sleep(2000);
            //do some loading work
            this.Dispatcher.Invoke(hideDelegate);

            Thread.Sleep(2000);
            this.Dispatcher.Invoke(showDelegate, "Loading Data... almost done");
            Thread.Sleep(2000);
            this.Dispatcher.Invoke(hideDelegate);

            //close the window
            Thread.Sleep(2000);
            this.Dispatcher.Invoke(DispatcherPriority.Normal,
        (Action)delegate() { Close(); });
        }
        private void showText(string txt)
        {
            txtLoading.Text = txt;
            BeginStoryboard(Showboard);
        }
        private void hideText()
        {
            BeginStoryboard(Hideboard);
        }

}

The splash screen is supposed to be opened at start of application.. please help guys..

Upvotes: 0

Views: 228

Answers (2)

Sheridan
Sheridan

Reputation: 69959

How about something simple like this?:

public partial class Chooselogin : Window
{
    private static bool isFirstTime = true;

    public Chooselogin()
    {
        if (isFirstTime)
        {
            new SplashWindow().ShowDialog();
            isFirstTime = false;
        }
        InitializeComponent();
    }

    ...
}

Now it will only display the splash screen once.

Upvotes: 1

Walt Ritscher
Walt Ritscher

Reputation: 7037

I recommend reading this post by Kent Boogaart

Example from the post

"WPF provides a SplashScreen class. It is simple by design and addresses the main goal of splash screens: immediate feedback. By virtue of forgoing the WPF stack and instead relying on Windows Imaging Component (WIC) to display images, it provides the quickest path to getting a splash on the screen short of writing your own native bootstrapper."

Upvotes: 1

Related Questions