【问题标题】:WPF: How to give feedback to user when he needs to wait for up to 3 seconds? [closed]WPF:当用户需要等待长达 3 秒时,如何向用户提供反馈? [关闭]
【发布时间】:2021-06-24 03:24:54
【问题描述】:

假设我正在编写一个带有单文档界面的 WPF 桌面应用程序(例如一个简单的图像编辑工具)。现在用户开始对该文档的操作可能需要 0.2 到 3 秒才能完成(例如对图像应用复杂的过滤器)。我们还假设在此过程中几乎不应该允许用户做任何事情。 (例如,在处理图像时,允许用户对该图像执行任何其他操作没有多大意义。)

在 WinForms 中,我会在这段时间内阻塞 UI 线程,将鼠标指针设置为 WaitCursor 并在主窗口中写一个状态标签,显示“正在处理...”。

现在有了 WPF,这似乎既不可能也不打算。首先,当 UI 线程被阻塞时,我无法更改主窗口上的标签来给用户即时反馈。

我在互联网上(如 StackOverflow 上的此处)读到这是错误的方法,我应该使用后台处理来保持 UI 线程响应。

好的,但是当我这样做时,我需要在操作进行时禁用几乎所有的用户界面。 (在我的图像编辑示例中:在处理图像时,不应允许用户对该图像启动另一个操作。)

但似乎没有一种简单的方法可以禁用(几乎)WPF 中的所有主窗口。对于更长的操作,最好的解决方案可能是弹出一个带有进度条的模式对话框,阻止对主窗口的所有访问。但是对于一个短暂的操作(可能只有几分之一秒),让对话窗口非常短暂地闪烁可能会非常不愉快。

那么我应该在这里做什么? WPF 中向用户提供有关短阻塞操作的反馈的最佳方式是什么?

【问题讨论】:

    标签: c# wpf user-interface


    【解决方案1】:

    您可以在软件界面上做一个透明的遮罩层来遮盖整个界面。在处理任务时,可以开启遮罩,使用户无法操作界面内容

    【讨论】:

    • 我喜欢这种方法。您还可以先将背景设为透明度为 98% 的深灰色,然后在中心放置一个加载微调器,然后使背景不透明操作所需的时间越长。 (上限为 50% @ 1 秒左右)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多