3 回答
TA贡献1815条经验 获得超10个赞
当 Wi-Fi 开始连接时,使用:
MyWindow popup = new MyWindow(); popup.ShowDialog();
MyWindow
包含信息的小表格在哪里。
连接 Wi-Fi 后,使用:
popup.Close();
ShowDialog()
阻止用户与父表单交互。
TA贡献1829条经验 获得超13个赞
您应该在后台线程上执行需要两秒钟才能完成的长时间运行的任务,并在调度程序线程上显示和关闭窗口,例如:
Window window = new Window()
{
WindowStyle = WindowStyle.None,
Content = new TextBlock { Text = "working..." }
};
Task.Run(() =>
{
//do something that might take a while here...
System.Threading.Thread.Sleep(2000);
}).ContinueWith(task => window.Close(),
CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
window.ShowDialog(); //Call .Show() instead if you don't want to block here until the task has finished.
TA贡献1784条经验 获得超7个赞
对于这类事情,我使用一个繁忙的“throbber”或“spinner”,它显示在窗口顶部的面板中。这只是用动画来显示正在发生的事情。我将其可见性绑定到窗口视图模型中的“IsBusy”属性。在继承自的基础视图模型中,因为这是一个常见的要求。
当我将 Isbusy 设置为 true 时,微调器就会出现并呈现动画。
当我将其设置为 False 时,微调器就会消失。
我还有一个显示消息的区域。这些是动画的,所以它们会出现,然后在几秒钟后淡出。
Throbber 是要查看的用户控件。
这通常位于用户可以编辑内容的面板中 - 因此他们无法在更新数据时更改数据。
我还在命令的 CanExecute 谓词中使用 IsBusy 来在处理完成时禁用按钮等。因为通知不一定是即时的,所以我检查所有命令并在 IsBusy 为 true 时退出。命令在运行时将 IsBusy 设置为 true。
为了完整起见,可能与贝拉的问题没有直接关系。
在某些情况下,我只想向用户显示处理正在进行,但允许他们继续工作。这种情况在我正在开发的游戏的地图和场景编辑器中经常发生。例如,当您将鼠标悬停在指挥官上时,指挥官与其下属之间会发生 Spatial A* 最佳路线计算,大约需要 1 到 12 秒的时间。我不想阻止用户,但我想表明在这种情况下正在发生一些事情。
我有第二种机制,带有一个侵入性较小的颤动器,用于此目的。它出现在我的用户通知消息旁边。
- 3 回答
- 0 关注
- 105 浏览
添加回答
举报