在运行函数之前和之后更改WPF属性

时间:2014-05-06 11:43:06

标签: c# wpf isenabled

运行此代码:

Window_Abfrage.IsEnabled = false;
Alert(Cloud.UserExists(new Cloud.User(TextBox_Cloud_User_UserName.Text)).ToString()); // unimportant for the problem; just a function causing a few seconds of time
Window_Abfrage.IsEnabled = true; 

不按我想要的方式工作。 我们的想法是,当Cloud.UserExists函数正在运行时,窗口被禁用,但实际上窗口一直处于启用状态,并且在结束时它只会在显示警报之前的短时间内切换为禁用状态。你知道为什么吗?

最诚挚的问候!

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为UI冻结(由于您正在调用的长时间运行任务)之前它可以呈现为已禁用。在.NET 2.0 / 3.5中实现所需行为的最佳方法是使用BackgroundWorker

  1. DoWork事件中(在单独的线程上执行)你 应该运行你的长期任务。
  2. RunWorkerCompleted事件中(在UI线程上执行)你应该 启用Window。
  3. 在按钮点击事件中,以这种方式运行BackgroundWorker

    Window_Abfrage.IsEnabled = false;
    backgroundWorker.RunWorkerAsync();