Я разрабатываю приложение для отладки, которое использует протокол WMI для связи с удаленной системой. Это приложение разработано в среде .NET 4.5 и использует шаблон MVVM. В моем случае MainViewModel связан с MainView.xaml, а остальные виды также связаны с соответствующими ViewModel с использованием DataTemplate в файле MainView.xaml.
Проблема: Позвольте мне определить проблему на примере.
- Предположим, что существует ManagementView.xaml с тремя кнопками (запуск, остановка, перезапуск).
- Когда пользователь нажимает кнопку (запуск), ManagementViewModel.cs будет пытаться использовать объект ManagementScope, который уже был подключен.
- После первого клика пользователь хочет перезагрузить. Затем он нажмет кнопку перезагрузки. Снова ManagementViewModel.cs будет использовать существующий ManagementScope для соединения с удаленной системой для выполнения.
- Но проблема в том, что сначала выполняется операция запуска, а затем выполняется операция перезапуска. Опять же, если вы нажмете другую кнопку, эти две операции будут повторены, а затем будет выполнена требуемая операция.
Как решить эту проблему?
Кажется, что выполненные операции сохраняются в очереди, а затем, когда пользователь нажимает на новую кнопку, все предыдущие операции повторяются. После этого выполняется требуемая операция.
Я ожидаю, что при нажатии пользователем кнопки должна выполняться только определенная операция. Но требуемая операция выполняется после повторения предыдущих операций. Я все еще не понимаю, создает ли эта проблема 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;
}