启动WPF应用程序

时间:2016-09-19 16:49:27

标签: wpf mvvm backgroundworker

我希望在应用程序启动时从数据库加载一些数据。

我想要的是首先显示主窗口,使用进度条,以及在运行运行时显示“数据正在加载”等状态文本。

我该怎么做?

我正在DbConn初始化我的数据库连接(MainWindow)和Application_Startup本身:

protected void Application_Startup(object sender, StartupEventArgs e)
        {
            DbConn= new DBConnection();
            System.Threading.Thread.CurrentThread.CurrentUICulture = DbConn.GetLocalCulture();
            System.Threading.Thread.CurrentThread.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;
            main = new MainWindow();
            main.Show();
        }

我在MainWindow上有后台工作人员,并在那里初始化我的窗口模型:

public MainWindow()
        {
            DataContext = new Models.MyModel(App.DbConn);
            InitializeComponent();
            BgWLoad = new BackgroundWorker();
            BgWLoad.WorkerSupportsCancellation = false;
            BgWLoad.DoWork += BgwLoad_DoWork;
            BgWLoad.ProgressChanged += BgwLoad_ProgressChanged;
            BgWLoad.RunWorkerCompleted += BgwLoad_RunWorkerCompleted;
}

我应该在哪里管理我的工作人员(BgWLoad.RunWorkerAsync)?

来自DB的提货数据逻辑当前放在MyModel端,并将进度报告为回调:

private void BgwLoadQK_DoWork(object sender, DoWorkEventArgs e)
        {
            StatusText.Text = Properties.Resources.msgLoadingKeySets;
            Model.Init((double progress) =>
            {
                ((BackgroundWorker)sender).ReportProgress(Convert.ToInt32(progress));
            });
        }

这样做可以吗?

或者如何使用最佳实践来组织地球?

1 个答案:

答案 0 :(得分:1)

为了在开始进程之前显示MainWindow,我使用MainWindow.ContentRendered事件来启动在布局和显示视图时触发的进程。