运行此代码:
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函数正在运行时,窗口被禁用,但实际上窗口一直处于启用状态,并且在结束时它只会在显示警报之前的短时间内切换为禁用状态。你知道为什么吗?
最诚挚的问候!
答案 0 :(得分:1)
这种情况正在发生,因为UI冻结(由于您正在调用的长时间运行任务)之前它可以呈现为已禁用。在.NET 2.0 / 3.5中实现所需行为的最佳方法是使用BackgroundWorker。
DoWork
事件中(在单独的线程上执行)你
应该运行你的长期任务。RunWorkerCompleted
事件中(在UI线程上执行)你应该
启用Window。在按钮点击事件中,以这种方式运行BackgroundWorker
:
Window_Abfrage.IsEnabled = false;
backgroundWorker.RunWorkerAsync();