为了账号安全,请及时绑定邮箱和手机立即绑定

显示加载 WPF 的消息

显示加载 WPF 的消息

C#
牛魔王的故事 2023-09-16 15:17:59
我有一个连接和断开 WiFi 的 WPF 应用程序。完成该过程大约需要 2 秒。在此期间,我想在当前窗口的顶部 显示一条简单的等待消息“正在连接..”或“正在断开连接...”,该消息会在该过程完成后立即关闭。我应该用什么?MessageBox不起作用,因为a)它有一个按钮,b)我不能通过代码随意关闭它(我认为)。
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

当 Wi-Fi 开始连接时,使用:

MyWindow popup = new MyWindow();
popup.ShowDialog();

MyWindow包含信息的小表格在哪里。

连接 Wi-Fi 后,使用:

popup.Close();

ShowDialog()阻止用户与父表单交互。


查看完整回答
反对 回复 2023-09-16
?
烙印99

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.



查看完整回答
反对 回复 2023-09-16
?
噜噜哒

TA贡献1784条经验 获得超7个赞

对于这类事情,我使用一个繁忙的“throbber”或“spinner”,它显示在窗口顶部的面板中。这只是用动画来显示正在发生的事情。我将其可见性绑定到窗口视图模型中的“IsBusy”属性。在继承自的基础视图模型中,因为这是一个常见的要求。

当我将 Isbusy 设置为 true 时,微调器就会出现并呈现动画。

当我将其设置为 False 时,微调器就会消失。

我还有一个显示消息的区域。这些是动画的,所以它们会出现,然后在几秒钟后淡出。


Throbber 是要查看的用户控件。

这通常位于用户可以编辑内容的面板中 - 因此他们无法在更新数据时更改数据。

我还在命令的 CanExecute 谓词中使用 IsBusy 来在处理完成时禁用按钮等。因为通知不一定是即时的,所以我检查所有命令并在 IsBusy 为 true 时退出。命令在运行时将 IsBusy 设置为 true。

为了完整起见,可能与贝拉的问题没有直接关系。

在某些情况下,我只想向用户显示处理正在进行,但允许他们继续工作。这种情况在我正在开发的游戏的地图和场景编辑器中经常发生。例如,当您将鼠标悬停在指挥官上时,指挥官与其下属之间会发生 Spatial A* 最佳路线计算,大约需要 1 到 12 秒的时间。我不想阻止用户,但我想表明在这种情况下正在发生一些事情。

我有第二种机制,带有一个侵入性较小的颤动器,用于此目的。它出现在我的用户通知消息旁边。


查看完整回答
反对 回复 2023-09-16
  • 3 回答
  • 0 关注
  • 74 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信