Silverlight启动一个事件,然后在一秒钟后启动另一个事件

Silverlight启动一个事件,然后在一秒钟后启动另一个事件,silverlight,Silverlight,有没有办法做到这一点 背景: 我有一个按钮点击。当点击按钮时,我试图显示一条“正在加载”的消息,运行一堆代码来完成一些UI工作,然后关闭“正在加载”的消息。通常需要几秒到20秒的时间。此时,加载消息根本不显示,UI冻结,直到“我的按钮单击”中的代码完成 我读过关于后台工作人员和调度员的文章,但一直没能让它发挥作用。我不确定这是否是因为按钮单击中的代码调用了各种其他代码(包括第三方代码),但我无法让它正确运行。这一切仍然有效,但它仍然冻结了用户界面,加载消息也没有出现 所以,我想知道是否有其他方法

有没有办法做到这一点

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

我读过关于后台工作人员和调度员的文章,但一直没能让它发挥作用。我不确定这是否是因为按钮单击中的代码调用了各种其他代码(包括第三方代码),但我无法让它正确运行。这一切仍然有效,但它仍然冻结了用户界面,加载消息也没有出现


所以,我想知道是否有其他方法可以解决这个问题。是否可以将其设置为在按钮上单击“我只显示加载消息”,然后在第二秒左右触发另一个执行我的长时间运行进程的事件?这样,UI仍会冻结几秒钟,但至少会显示一条“正在加载”消息。

您应该可以通过调用来完成此操作

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


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

您应该可以通过调用来完成这项工作

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


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

使用BackgroundWorker,您的问题将在不冻结UI的情况下得到解决。你遇到了什么问题?BackgroundWorker的一个重要技巧是在对UI元素调用方法时必须使用Dispatcher.Invoke()。我不太确定。我使用BackgroundWorker和Dispatcher,应用程序正常工作,包括在单击按钮后仍然冻结整个应用程序。问题甚至可能与线程或UI无关。也许这个过程需要很长时间才能完成。当这种情况发生时,我的CPU会上升到50%,这通常不会发生,除非有大的事情发生。听起来对图表元素本身的调用很慢。System.Threading.Timer是您需要的。谢谢。计时器工作。我使用System.Windows.Threading.Dispatchermer显示加载指示器,启动计时器,然后执行长时间运行的代码。应用程序仍然冻结,但至少加载指示器首先显示。这就是我现在想要的。使用BackgroundWorker,您的问题将在没有UI冻结的情况下得到解决。你遇到了什么问题?BackgroundWorker的一个重要技巧是在对UI元素调用方法时必须使用Dispatcher.Invoke()。我不太确定。我使用BackgroundWorker和Dispatcher,应用程序正常工作,包括在单击按钮后仍然冻结整个应用程序。问题甚至可能与线程或UI无关。也许这个过程需要很长时间才能完成。当这种情况发生时,我的CPU会上升到50%,这通常不会发生,除非有大的事情发生。听起来对图表元素本身的调用很慢。System.Threading.Timer是您需要的。谢谢。计时器工作。我使用System.Windows.Threading.Dispatchermer显示加载指示器,启动计时器,然后执行长时间运行的代码。应用程序仍然冻结,但至少加载指示器首先显示。这就是我现在想要的。这段代码运行正常,但并不能缓解问题。当我点击OK按钮时,它仍然会冻结整个应用程序,直到过程完成,并且我的加载指示器也没有显示出来。长时间运行的代码使用第三方库从数据创建图表。是的,当您描述这个问题时,我很害怕。长时间运行的代码是获取图表的数据还是仅仅构建图表?它使用已经从数据库检索到的数据。然后根据数据构建图表。据我所知,它是根据现有数据从头开始构建图表的。但是,之后的代码我不太熟悉,这就是为什么我正在寻找一个更快的解决方案,在屏幕冻结时至少显示一个加载指示器?Visifire?此代码运行正常,但并不能缓解问题。当我点击OK按钮时,它仍然会冻结整个应用程序,直到过程完成,并且我的加载指示器也没有显示出来。长时间运行的代码使用第三方库从数据创建图表。是的,当您描述这个问题时,我很害怕。长时间运行的代码是获取图表的数据还是仅仅构建图表?它使用已经从数据库检索到的数据。然后根据数据构建图表。据我所知,它是根据现有数据从头开始构建图表的。但是,之后的代码我不太熟悉,这就是为什么我正在寻找一个更快的解决方案,在屏幕冻结时至少显示一个加载指示器?Visifire?
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();
    }
}