C# 设置可见性属性不显示控件

C# 设置可见性属性不显示控件,c#,wpf,multithreading,visibility,C#,Wpf,Multithreading,Visibility,微调器控件的可见性有问题。 控件本身工作。。。如果我在初始化后立即将其设置为可见,它将按预期显示和设置动画 但是如果我试图从代码中显示它,它就永远不会被画出来 .cs文件(演示者) xaml.cs文件 void IDocumentView.ShowDocumentProgressSpinner(bool show) { if (show) { this.DocumentProgressSpinner.Visibility = Visibility.Visible; } e

微调器控件的可见性有问题。 控件本身工作。。。如果我在初始化后立即将其设置为可见,它将按预期显示和设置动画

但是如果我试图从代码中显示它,它就永远不会被画出来

.cs文件(演示者)

xaml.cs文件

void IDocumentView.ShowDocumentProgressSpinner(bool show)
{
  if (show)
  {
    this.DocumentProgressSpinner.Visibility = Visibility.Visible;
  }
  else
  {
    this.DocumentProgressSpinner.Visibility = Visibility.Hidden;
  }
}
如果我在初始化微调器后立即将可见性设置为可见,则微调器将正常工作

主控件xaml的一部分(微调器是自定义控件)

真的

真的


该控件被调用,因为“windows微调器”被激活,只是该控件从未显示…

问题是您正在调度程序线程上运行保存操作,而在保存操作期间,调度线程一直被阻塞。只有在保存操作完成后,UI才会更新,因此您永远不会看到“等待”状态。相反,您应该从事件分派中剥离一个新线程,并将等待指示器设置为可见。在单独的线程中执行保存操作,保存完成后,使用调度程序在调度程序线程上再次隐藏等待指示器


有关如何实现此功能的更多详细信息,请参阅。

发布
ShowDocumentProgressSpinner
的代码。如果保存方法执行一些UI更新,该怎么办。。。在bckWorker中运行它不会阻止它更新UI线程GUI吗?UI更新需要通过Dispatcher完成。您可以(并且需要)在“保存线程”中执行多个异步Dispatcher.Invoke(…)调用。
void IDocumentView.ShowDocumentProgressSpinner(bool show)
{
  if (show)
  {
    this.DocumentProgressSpinner.Visibility = Visibility.Visible;
  }
  else
  {
    this.DocumentProgressSpinner.Visibility = Visibility.Hidden;
  }
}
...
      <Viewbox Grid.Row="3" Width="30" Height="30"
                HorizontalAlignment="Center"
                VerticalAlignment="Center">
        <my:DocumentProgressSpinnerView x:Name="DocumentProgressSpinner" />
...
Thread.CurrentThread == Dispatcher.CurrentDispatcher.Thread
Dispatcher.FromThread(Thread.CurrentThread).CheckAccess()