Я открываю новое окно в отдельной теме. Я хочу, чтобы окно открылось, и задание запустилось автоматически, а затем сообщите о его ходе в это окно (я буду использовать индикатор выполнения).
Код действия, открывающий окно:
private void button_Run_Click(object sender, RoutedEventArgs e)
{
ExecutorWindow myExecWindow = new ExecutorWindow();
myExecWindow.Show();
}
Код окна:
public partial class ExecutorWindow : Window
{
BackgroundWorker execBackground = new BackgroundWorker();
public ExecutorWindow()
{
InitializeComponent();
RunExecutor();
}
public void RunExecutor()
{
// CREATE BACKGROUNDWORKER FOR EXECUTOR
execBackground.DoWork += new DoWorkEventHandler(execBackground_DoWork);
execBackground.RunWorkerCompleted += new RunWorkerCompletedEventHandler(execBackground_RunWorkerCompleted);
execBackground.WorkerReportsProgress = true;
execBackground.WorkerSupportsCancellation = true;
// RUN BACKGROUNDWORKER
execBackground.RunWorkerAsync();
}
private void execBackground_DoWork(object sender, DoWorkEventArgs e)
{
// CREATE EXECUTOR INSTANCE
Executor myExecutor = new Executor(arg1, arg2);
myExecutor.RunWhileRemainMachines();
}
private void execBackground_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("RunWorkerCompleted execBackground");
}
}
Но что происходит, так это то, что RunProcessingJob вызывается, когда я закрываю только окно (что нормально, потому что я запускаю его после ShowDialog). Я пытался вызвать его из общедоступной функции ExecutorWindow (), но тогда все наоборот: окно открывается только после завершения RunProcessingJob.
Я не знаю, как заказать это ... поведение, которое я хочу, это:
- нажмите кнопку
- открытое окно
- запустить процесс обработки (без дальнейшего взаимодействия с пользователем)
- обновить окно во время работы
Должен ли я выполнять свое задание на обработку в BackgroundWorker, вызываемом из общедоступного ExecutorWindow ()?
Эта работа по обработке уже интенсивно использует BackgroundWorkers, и я не уверен, что это элегантный способ ..
РЕДАКТИРОВАТЬ: я обновил свой код на основе ваших комментариев (работает непосредственно в моем окне без создания другого потока. Плюс я запускаю свое задание на обработку из окна Конструктора, но теперь в отдельном потоке, чтобы предотвратить возникшие у меня проблемы с блокировкой) .