2

我正在构建一个包含大量动画的 Windows 手机应用程序。我需要的是,当应用程序启动时,应该完成第一个动画,比如 myS() 是故事板的名称。只有在动画完成后,文本块才会在 3 秒后出现。我应该使用什么方法让文本框的显示等待故事板完成?我尝试的是使用 Thread.Sleeps(10000) 但这不起作用。这是代码 -

public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    public MainPage()
    {
        InitializeComponent();
        c1.Visibility = Visibility.Collapsed; //c1 is the name of the textbox
        myS.Begin();
        canDisp();
    }

    private void e1_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
    {
        myS1.Begin();
    }

    private void e1_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
    {
        myS2.Begin();
    }
    void canDisp()
    {
        c1.Visibility = Visibility.Visible;
    }}

myS.Begin() 执行完成后,我希望程序等待 3 秒然后执行 canDisp() 方法,我该如何实现?

4

2 回答 2

4

如果您的动画是一个,Storyboard那么它有一个Completed事件(MSDN 链接)就是为了这个目的。

您的调用Thread.Sleep()可能与动画在同一线程上运行,因此在动画处于睡眠状态时停止运行。
如果你真的想走这条路,那么你需要将你的睡眠呼叫移动到另一个线程。


如果你真的想使用线程,一个简单的方法是:

System.Threading.ThreadPool.QueueUserWorkItem(obj =>
    {
        System.Threading.Thread.Sleep(5000);

        Dispatcher.BeginInvoke(() =>
            {
                MessageBox.Show("after delay");
            });
    });
于 2013-07-15T17:05:15.007 回答
0

我正在使用一个 Windows 商店应用程序,其中 System.Threading.ThreadPool.QueueUserWorkItem 不可用。所以我确实喜欢这个并且没有按预期工作

  await Windows.System.Threading.ThreadPool.RunAsync(async (s) =>
        {

            await Task.Delay(1);
            await MainViewModel.Instance.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () =>
            {
            MessageBox.Show("after delay");
             });
             }, Windows.System.Threading.WorkItemPriority.High);
于 2016-01-07T07:06:51.830 回答