我希望在应用程序启动时从数据库加载一些数据。
我想要的是首先显示主窗口,使用进度条,以及在运行运行时显示“数据正在加载”等状态文本。
我该怎么做?
我正在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));
});
}
这样做可以吗?
或者如何使用最佳实践来组织地球?
答案 0 :(得分:1)
为了在开始进程之前显示MainWindow,我使用MainWindow.ContentRendered事件来启动在布局和显示视图时触发的进程。