Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF C中设置加载动画#_C#_Wpf_Animation_Loading_Dispatcher - Fatal编程技术网

C# 在WPF C中设置加载动画#

C# 在WPF C中设置加载动画#,c#,wpf,animation,loading,dispatcher,C#,Wpf,Animation,Loading,Dispatcher,我的窗户上有一个按钮。用户单击按钮后,我希望我的应用程序为加载标签设置动画(旋转标签),在另一个线程从数据库中获取一些数据从DB加载数据后,动画必须结束。这项任务看起来很简单,但不起作用。 问题是,无论我做什么,动画只有在从数据库加载后才开始,而不需要 请帮忙。下面是一些代码: Dispatcher.Completed事件在主UI线程上执行。您的工作线程正在将调度程序操作排入队列并退出。与其创建一个线程来启动动画,然后在完成的处理程序中加载数据库,不如在主线程中启动动画,然后创建一个工作线程来加

我的窗户上有一个按钮。用户单击按钮后,我希望我的应用程序为加载标签设置动画(旋转标签),在另一个线程从数据库中获取一些数据从DB加载数据后,动画必须结束。这项任务看起来很简单,但不起作用。 问题是,无论我做什么,动画只有在从数据库加载后才开始,而不需要

请帮忙。下面是一些代码:


Dispatcher.Completed事件在主UI线程上执行。您的工作线程正在将调度程序操作排入队列并退出。与其创建一个线程来启动动画,然后在完成的处理程序中加载数据库,不如在主线程中启动动画,然后创建一个工作线程来加载数据库

private void LoginButtonClick(object sender, RoutedEventArgs e)
{
  var da = new DoubleAnimation(360, 0, new Duration(TimeSpan.FromSeconds(1)));
  var rt = new RotateTransform();
  loadingLabel.RenderTransform = rt;
  loadingLabel.RenderTransformOrigin = new Point(0.5, 0.5);
  da.RepeatBehavior = RepeatBehavior.Forever;
  rt.BeginAnimation(RotateTransform.AngleProperty, da);

  Thread thread = new Thread(new ThreadStart(LoadData));
  thread.Start();
}

void LoadData()
{
  //Loading From Database

  // Use a Dispatch.BeginInvoke here to stop the animation
  // and do any other UI updates that use the results of the database load
}

Dispatcher.Completed事件在主UI线程上执行。您的工作线程正在将调度程序操作排入队列并退出。与其创建一个线程来启动动画,然后在完成的处理程序中加载数据库,不如在主线程中启动动画,然后创建一个工作线程来加载数据库

private void LoginButtonClick(object sender, RoutedEventArgs e)
{
  var da = new DoubleAnimation(360, 0, new Duration(TimeSpan.FromSeconds(1)));
  var rt = new RotateTransform();
  loadingLabel.RenderTransform = rt;
  loadingLabel.RenderTransformOrigin = new Point(0.5, 0.5);
  da.RepeatBehavior = RepeatBehavior.Forever;
  rt.BeginAnimation(RotateTransform.AngleProperty, da);

  Thread thread = new Thread(new ThreadStart(LoadData));
  thread.Start();
}

void LoadData()
{
  //Loading From Database

  // Use a Dispatch.BeginInvoke here to stop the animation
  // and do any other UI updates that use the results of the database load
}