【发布时间】:2016-10-03 15:44:41
【问题描述】:
在长时间操作期间,我想禁用一个按钮并清除一个文本块。
按钮点击事件在绘制屏幕之前完全处理,因此按钮永远不会被明显禁用
private bool btnEnabled = true;
public bool BtnEnabled
{
get { return btnEnabled; }
set
{
if (value == btnEnabled)
return;
btnEnabled = value;
NotifyPropertyChanged("BtnEnabled");
}
}
private string results = "start";
public string Results
{
get { return results; }
set
{
if (value == results)
return;
results = value;
NotifyPropertyChanged("Results");
}
}
private void btn_Click(object sender, RoutedEventArgs e)
{
BtnEnabled = false;
Results = string.Empty;
// whould like to displany wait spinner
LongProcess();
BtnEnabled = true;
}
private void LongProcess()
{
//database query
System.Threading.Thread.Sleep(10000);
Results = "this is the results";
}
如何让按钮在长事件期间禁用?
我遇到的问题是用户感到沮丧并开始点击,而这些点击都在队列中并得到处理。
【问题讨论】:
-
使用后台处理运行长代码。这将允许 UI 线程更新并显示更改以禁用按钮。
-
我认为你可以尝试 async & await 来实现这一点。
-
@Rennie yes await 似乎可以解决问题
-
@Paparazzi 我正在发布答案。