有没有办法做这样的事情?
背景: 我点击了一下按钮。单击按钮时,我尝试显示“加载”消息,运行一堆代码执行一些UI工作,然后关闭“加载”消息。通常需要几秒到20秒的时间。目前,加载消息根本没有显示,并且UI冻结,直到我的按钮点击中的代码完成。
我读过有关后台工作人员和调度员的信息,但是无法让它工作。我不确定是不是因为按钮点击中的代码调用各种其他代码(包括第三方的东西),但我无法让它正确运行。这一切仍然有效,但它仍然冻结了UI,并且没有出现加载消息。
所以,我想知道是否还有另一种解决方法。是否可以进行设置,以便在按钮单击时我只显示加载消息,然后大约一秒钟后再触发另一个执行我长时间运行过程的事件?这样UI仍会冻结几秒钟,但至少它会显示“加载”消息。
答案 0 :(得分: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秒才能完成?