Операции повторяются в модели представления MVVM при попытке выполнить другую операцию в удаленной системе. - PullRequest
0 голосов
/ 06 июня 2019

Я разрабатываю приложение для отладки, которое использует протокол WMI для связи с удаленной системой. Это приложение разработано в среде .NET 4.5 и использует шаблон MVVM. В моем случае MainViewModel связан с MainView.xaml, а остальные виды также связаны с соответствующими ViewModel с использованием DataTemplate в файле MainView.xaml.

Проблема: Позвольте мне определить проблему на примере.

  1. Предположим, что существует ManagementView.xaml с тремя кнопками (запуск, остановка, перезапуск).
  2. Когда пользователь нажимает кнопку (запуск), ManagementViewModel.cs будет пытаться использовать объект ManagementScope, который уже был подключен.
  3. После первого клика пользователь хочет перезагрузить. Затем он нажмет кнопку перезагрузки. Снова ManagementViewModel.cs будет использовать существующий ManagementScope для соединения с удаленной системой для выполнения.
  4. Но проблема в том, что сначала выполняется операция запуска, а затем выполняется операция перезапуска. Опять же, если вы нажмете другую кнопку, эти две операции будут повторены, а затем будет выполнена требуемая операция.

Как решить эту проблему?

Кажется, что выполненные операции сохраняются в очереди, а затем, когда пользователь нажимает на новую кнопку, все предыдущие операции повторяются. После этого выполняется требуемая операция.

Я ожидаю, что при нажатии пользователем кнопки должна выполняться только определенная операция. Но требуемая операция выполняется после повторения предыдущих операций. Я все еще не понимаю, создает ли эта проблема viewModel или это связано с тем, что я использую объект Connected ManagementScope для выполнения операций.

enter code here

private void UpdateAgentStatus()
{
logger.Info("Updating the Agent current status asynchronous method");
//Running process in asynchronous mode
backgroundWorker.DoWork += BackgroundWorker_UpdateAgentStatus;
backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
backgroundWorker.RunWorkerAsync();
}

private void BackgroundWorker_UpdateAgentStatus(object sender, DoWorkEventArgs e)
{
logger.Info("Setting the BusyIndicator as true to update agent status");
//Setting the loading visible
BusyContent = "Refreshing ...";
IsBusy = true;
//Performing other actions using ManagementScope object
}

private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
logger.Info("Disabling the BusyIndicator after the process completion");
IsBusy = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...