SplashScreen和自定义消息

时间:2011-11-12 19:13:13

标签: wpf .net-4.0

是否可以在.Net中使用SplashScreen类在我的应用程序加载时显示动态消息?

类似的东西。
模块一加载...
模块二加载...
等等。

2 个答案:

答案 0 :(得分:2)

不,您需要自己编写此功能。内置启动画面只能显示静态图像。

答案 1 :(得分:2)

您可以使用'System.Theading'来完成此操作。下面的代码在一个单独的线程上启动一个“启动画面”,而你的应用程序(在我下面的例子中称为MainForm())加载或初始化。首先在你的“main()”方法中(在program.cs文件中,除非你已经重命名),你应该显示你的启动画面。这将是您希望在启动时向用户显示的WinForm或WPF表单。这是从main()启动,如下所示:

    [STAThread]
    static void Main()
    {
        // Splash screen, which is terminated in MainForm.       
        SplashForm.ShowSplash();

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        // Run UserCost.
     Application.Run(new MainForm());
    }

在您的SplashScreen代码中,您需要以下内容:

public partial class SplashForm : Form
{

    // Thredding.
    private static Thread _splashThread;
    private static SplashForm _splashForm;    

    public SplashForm()
    {
        InitializeComponent();
    }

    // Show the Splash Screen (Loading...)      
    public static void ShowSplash()    
    {        
        if (_splashThread == null)        
        {            
            // show the form in a new thread            
            _splashThread = new Thread(new ThreadStart(DoShowSplash));            
            _splashThread.IsBackground = true;            
            _splashThread.Start();        
        }    
    }    

    // Called by the thread    
    private static void DoShowSplash()    
    {        
        if (_splashForm == null)            
            _splashForm = new SplashForm();        
        // create a new message pump on this thread (started from ShowSplash)        
        Application.Run(_splashForm);
    }    

    // Close the splash (Loading...) screen    
    public static void CloseSplash()    
    {        
        // Need to call on the thread that launched this splash        
        if (_splashForm.InvokeRequired)            
            _splashForm.Invoke(new MethodInvoker(CloseSplash));        
        else            
            Application.ExitThread();    
    }

}

这将在单独的后台线程上启动splash表单,允许您同时继续呈现主应用程序。要显示有关加载的消息,您必须从主UI线程中提取信息,或者以纯粹美学的方式工作。要在初始化应用程序时关闭并关闭启动画面,请将以下内容放在默认构造函数中(如果需要,可以重载构造函数):

    public MainForm()
    {
        // ready to go, now initialise main and close the splashForm. 
        InitializeComponent();
        SplashForm.CloseSplash();
    }

上面的代码应该相对容易理解。

我希望这会有所帮助。