1

有没有办法做这样的事情?

背景:我有一个按钮点击。单击按钮时,我尝试显示“正在加载”消息,运行一堆执行某些 UI 工作的代码,然后关闭“正在加载”消息。通常需要几秒钟到 20 秒的时间。目前加载消息根本不显示,UI 冻结,直到我的按钮单击中的代码完成。

我已经阅读了有关 Background Worker 和 Dispatcher 的信息,但无法让它工作。我不确定是否是因为按钮单击中的代码调用了各种其他代码(包括 3rd 方的东西),但我无法让它正确运行。这一切仍然有效,但它仍然冻结 UI 并且没有出现加载消息。

所以,我想知道是否有其他方法可以解决这个问题。是否可以进行设置,以便在单击按钮时仅显示加载消息,然后大约一秒钟后触发另一个执行我长时间运行的进程的事件?这样,用户界面仍会冻结几秒钟,但至少会显示“正在加载”消息。

4

1 回答 1

1

您应该能够通过Dispatcher.BeginInvoke调用来执行此操作。

private void ButtonClick(object sender, EventArgs e)
{
    ShowMyLoadingMessage(); // your code, not sure what it is
    Dispatcher.BeginInvoke(() =>
    {
       CallMyLongRunningCode(); // again, not sure what this is
       HideMyLoadingMessage();
    }
}

我不认为这是最好的解决方案,因为它在 UI 线程上运行,但它应该满足您的要求。

需要 20 秒的长时间运行代码是什么?

于 2012-04-24T22:57:23.650 回答