を更新し、BackgroundWorkerのMVVMを設定します。は、私はStartCommandのクラスを持っているプログレスバー
public class StartCommand : ICommand
{
public void Execute(object parameter)
{
//Fill Listview1
...
//Here I want to increase the Progressbarvalue
//Fill Listview2
...
//Here again and so far..
}
}
にスタートボタンをクリックすると、実行されるコマンドを実行し、私のMainWindow.xaml
(もprogressBar
だ場合)。
私は今何をしたいのですか?は、リストビューがロードされている間、これらの場所(コードを見てください)でプログレスバーを更新しています。 バックグラウンドワーカーを設定するにはどうすればよいですか?
は、私はそのような何かを試してみました:
public class StartCommand : ICommand
{
MainWindow mainWindow;
public StartCommand(MainWindow mainWindow)
{
this.mainWindow = mainWindow
}
public void Execute(object parameter)
{
//Fill Listview1
...
mainWindow.backgroundWorker1.RunWorkerAsync(10);
//Fill Listview2
...
mainWindow.backgroundWorker1.RunWorkerAsync(20);
}
}
メインウィンドウ:
public partial class MainWindow : Window
{
BackgroundWorker backgroundWorker1;
public MainWindow()
{
InitializeComponent();
InitializeBackgroundWorker();
}
private void InitializeBackgroundWorker()
{
backgroundWorker1.DoWork +=
new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(
backgroundWorker1_RunWorkerCompleted);
backgroundWorker1.ProgressChanged +=
new ProgressChangedEventHandler(
backgroundWorker1_ProgressChanged);
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
e.Result = UpdateProgressBar((int)e.Argument, worker);
}
private int UpdateProgressBar(int value, BackgroundWorker worker)
{
worker.ReportProgress(value);
return Convert.ToInt32(progressBar.Value);
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
private void backgroundWorker1_ProgressChanged(object sender,ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
}
}
ザッツ(私は見当がつかない原因これは、唯一のいくつかのコピー/貼り付け配置で動作しませんそれを達成する方法については、WPFのThreadsで初めての作業です)。しかし、たぶんあなたが探しているもののより良い光景を得たかもしれません。
[BackgroundWorker.WorkerReportsProgress](http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.workerreportsprogress.aspx)プロパティを「true」に設定する必要があることに注意してください'ReportProgress'を有効にします。 – Clemens
問題は、コードを分離したいということです。つまり、MainWindowのBackgroundcodeに "ListViewFilling"を書きたくないということです。私はまだクラスStartCommandでそれをしたい..どのListViewFillingのように見える: 'viewModel.MissingTables = schemaComparer.GetSchemaModifications(viewModel.FirstSchemaToCompare、viewModel.SecondSchemaToCompare);' –
eMi
良い!あなたができることは、ViewModelに背景作業者を置くことです。 –