У меня есть код, в котором я хочу показать индикатор выполнения, который не определяется при нажатии кнопки. Параллельно, когда отображается индикатор выполнения, я запускаю задачу и выполняю трудоемкую операцию в этой задаче и ожидаю ее. Проблема в том, что индикатор выполнения никогда не отображается при нажатии кнопки. Пожалуйста, помогите
private async void btnUpdateGrid_Click(object sender, RoutedEventArgs e)
{
stkProgressPanel.Visibility = Visibility.Visible;
await Task.Factory.StartNew(() =>
{
UpdatePlate2DView();
});
stkProgressPanel.Visibility = Visibility.Collapsed;
}
Это метод UpdatePlate2DView. Я не публикую его, потому что в нем много кода. Также в какой-то момент я запускаю диспетчер, потому что получаю исключение кросс-потока.
private void UpdatePlate2DView()
{
try
{
//UIUtils.SetBusyState();
var chartVM = ViewModel.GetActive2DVM();
if (chartVM != null)
{
Dispatcher.BeginInvoke((Action)(() =>
{
var ctrl = AllAnalysisControlsManager.GetAnalysisControl(chartVM);
if (ctrl != null)
{
m_2DChartCtrl = ctrl as Amplitude2DChartControl;
if (m_2DChartCtrl == null) return;
if (!m_2DChartCtrl.IsChartInitialized)
{//chart never shown to user. So, Show in hidden window so that UI is initialized.
var hiddenWindow = new Window //make sure the window is invisible
{
Width = Settings.Default.Plate2DImageWidth,
Height = Settings.Default.Plate2DImageHeight,
WindowStyle = WindowStyle.None,
ShowInTaskbar = false,
ShowActivated = false,
Content = ctrl,
Opacity = 0.01,
ResizeMode = ResizeMode.NoResize,
AllowsTransparency = true
};
hiddenWindow.Show();
}
m_2DChartCtrl.UpdateUIEvenNotVisible = true;
ViewModel.SaveOldChartState();
string imageDir = ViewModel.GetImageDirectoryName();
ViewModel.DeleteExistingImages();
ViewModel.CreateDirectoryIfNotExists();
runData = ViewModel.Amplitude2DVM.AnalysisDataService.RunData;
for (int well = 0; well < runData.WellCount; well++)
{
ViewModel.SelectWell(well);
string wellName = WellNameUtils.GetWellName(well, runData.RowCount, runData.ColumnCount);
string filePath = System.IO.Path.Combine(imageDir, string.Format("{0}.png", wellName));
//System.Windows.Forms.Application.DoEvents();
m_2DChartCtrl.AnalysisChart.LightChart.SaveImage(filePath,
TargetImageFormat.Png,
Settings.Default.Plate2DImageWidth,
Settings.Default.Plate2DImageHeight, null,
false);
ViewModel.SetCellData(well, filePath);
}
}
ViewModel.RestoreOldChartState();
m_2DChartCtrl.UpdateUIEvenNotVisible = false;
}));
}
}
catch (Exception ex)
{
SystemDebugLogLogger.LogError("UpdatePlate2DView:" + ex.Message);
}
}