Я хочу, чтобы некоторые данные загружались из БД при запуске приложения.Длительная работа при запуске WPF-приложения
Что я хочу - сначала показать главное окно, индикатор выполнения и текст состояния, как «данные загружаются» во время работы.
Как мне это сделать на самом деле?
Я initilizing моего подключения к БД (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
)?
Логика коносамент данных из БД в настоящее время находится на MyModel стороне, и прогресс сообщается как обратного вызова:
private void BgwLoadQK_DoWork(object sender, DoWorkEventArgs e)
{
StatusText.Text = Properties.Resources.msgLoadingKeySets;
Model.Init((double progress) =>
{
((BackgroundWorker)sender).ReportProgress(Convert.ToInt32(progress));
});
}
ли это ОК, чтобы сделать это?
Или как на Земле это должно быть организовано с использованием передовой практики?