Я вырывал свои волосы, пытаясь выяснить, почему обычная команда Dispatcher.Invoke не сработала для перерисовки моего окна, но теперь я, похоже, проблема связана с отключением контента. Я использую полный каркас Dotnet 4.0.
Если я использую
private void DoSomething()
{
HandleBusyEnableDisable(false);
DoSomethingThatKeepsItBusy();
HandleBusyEnableDisable(true);
}
private void HandleBusyEnableDisable(bool enabling)
{
Cursor = enabling ? Cursors.Arrow : Cursors.Wait;
CanvasFunctions.IsEnabled = enabling;
CanvasRight.IsEnabled = enabling;
CanvasRight.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Render, EmptyDelegate);
Я вижу изменение курсора, но содержимое не выглядит отключенным. Если я добавлю
CanvasRight.Opacity = enabling ? 1 : .5;
тогда я думаю, что иногда это работает. Есть ли что-то еще, что я могу сделать?
Выполняемая задача проверяет введенные пользователем данные, поэтому ее намного проще запустить в потоке графического интерфейса. Это не должно быть так сложно.