当前位置: 代码迷 >> C# >> WPF使用 Task.Delay 发作延迟不成功
  详细解决方案

WPF使用 Task.Delay 发作延迟不成功

热度:779   发布时间:2016-05-05 03:37:16.0
WPF使用 Task.Delay 产生延迟不成功
///////////////以下为楼主某个事件响应函数的代码

private void Button_Click_4(object sender, RoutedEventArgs e)
        {
            //turning
            int isornotsuccess = 0;
            Task.Delay(50000);
            
            ImformationText.Text = null;
            ImformationText.Text += String.Format("\r\nwe have released if you input the wave-number,or release 100-band if you not. . . .\r\n");
            ThreadPool.QueueUserWorkItem((object o) =>//这后面一长串是一个语句,一个线程
           {
               myout.Result = " calling the function....";                                    
               Task.Delay(200000);
               int bandnum = 0;
               if (Convert.ToInt32(myout.Waveband) < 128 && Convert.ToInt32(myout.Waveband)>= 0)
               {
                    bandnum=Convert.ToInt32(myout.Waveband);                    
               }
               else
               {
                    bandnum = 100;
               }
              isornotsuccess = MyTurnImageDll.MyTurnImage(exportpath, importpath, bandnum);             
              
               if (isornotsuccess == 1)
               {                 
                   myout.Result = "turnning success";
               }             
           });

        }

////////////////问题
调试的时候,完全没有延迟的效果,两个Delay都没有发挥作用。。。怎么回事?
------解决思路----------------------
延迟n秒钟执行,用定时器。如果c#很难学的话,就学javascript。至少会在这个方面有一个正确的编程方式。
------解决思路----------------------
Task.Delay(200000);本身并不延迟当前的执行。
它只是创建了一个任务,并马上返回。所以你看不到延迟。

Task.Delay具体见:https://msdn.microsoft.com/zh-cn/library/hh194873%28v=vs.110%29.aspx

你能用Task.Delay说明你用dotnet4.5,因此你可以用async await模式来简化代码:
private async void Button_Click(object sender, RoutedEventArgs e)
{
    textBlock1.Text = "hello";
    await Task.Delay(2000);
    textBlock1.Text = "world";
}




------解决思路----------------------
Task.Delay
不是Thread.Sleep的概念,是延迟创建任务,不是任务执行过程中停歇
  相关解决方案