1

运行此代码:

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 正在运行时,窗口被禁用,但实际上窗口一直处于启用状态,最后它切换到禁用状态,只有很短的时间才会显示警报。你知道为什么吗?

此致!

4

1 回答 1

1

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

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

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

于 2014-05-06T12:45:46.453 回答