【问题标题】:Task delay not waiting (windows phone 8 application)任务延迟不等待(Windows Phone 8 应用程序)
【发布时间】:2015-01-19 20:40:47
【问题描述】:

我正在尝试执行一个非常简单的任务。我使用 VS Express 2013 开始了一个新项目,选择了 Windows Phone 8 应用程序(而不是 Silverlight)。 在 xaml 方面,界面包含一个按钮和一个矩形。 我想要做的是:单击按钮时,矩形将被绿色背景填充,然后 1 秒后,背景将变为红色。最后,按钮中的文本更改为“FINISHED”,只是为了检查一切是否按正确的顺序运行。 起初,我尝试使用 Thread.Sleep 方法,但如果我理解得很好,这仅适用于 Silverlight。所以我搜索并发现了许多不同的帖子,我对任务、线程、TPL 等有点困惑。 这是我尝试过的(位于我的主目录中)

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();           
        this.NavigationCacheMode = NavigationCacheMode.Required;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        // TODO: préparer la page pour affichage ici.

    }
private void BtnClick(object sender, RoutedEventArgs e)
    {
        //Task task = Task.Factory.StartNew( () => DoWait());
        DoWait();
    }

    public async void DoWait()
    {
        SolidColorBrush greenBrush = new SolidColorBrush(Colors.Green);
        SolidColorBrush redBrush = new SolidColorBrush(Colors.Red);
        BtnGreen();
        await Task.Delay(1000);
        Rect1.Fill = redBrush;
        await Task.Delay(1000);               
        LabelChange();
    }

    public void LabelChange()
    {
        Btn.Content = "FINISHED";
    }

    public void BtnGreen()
    {
        SolidColorBrush greenBrush = new SolidColorBrush(Colors.Green);
        Rect1.Fill = greenBrush;
    }

但是会发生以下情况: - 矩形填充红色 - 有 1 秒的暂停 - 按钮中的文本已更改。 所以,除了第一次暂停(在矩形变绿然后变红之间)之外,一切都很好。就好像第一个“await Task.delay(1000)”之后没有等待(即我从未看到矩形变为绿色)。

我试图找到一个解释,但我完全迷失了......如果有人可以提供帮助,我将不胜感激。

编辑:这里是问题的更详细描述 第一次单击按钮时,矩形变为绿色之前会有短暂的延迟,但是当我进一步单击按钮时,矩形将立即变为绿色。所以延迟(UI 被阻止?)仅在第一次单击按钮时发生

【问题讨论】:

  • 我在代码中看不到任何会导致此行为的内容。您绝对确定这是它的行为方式吗?
  • 2 小时前提出的类似问题stackoverflow.com/questions/28031633/…
  • @Mike 我刚刚尝试了您的代码,它按预期工作。您能否提供一个 repo 或其他内容,以便我们验证您的问题?
  • 上面的代码应该可以工作,但也许不是全部代码?如果您用某些东西阻止 UI,该程序可以按照您所描述的方式运行。例如,如果您在 Btn_Click 中的 DoWait() 之后添加 Task.Delay(2000).Wait()
  • 我已经重新加载了 VSE2013,这就是发生的情况。第一次单击按钮时,矩形变为绿色之前会有短暂的延迟,但是当我进一步单击按钮时,矩形将立即变为绿色。所以延迟(UI 被阻止?)仅在第一次单击按钮时发生

标签: c# wpf multithreading windows-phone-8.1


【解决方案1】:

在 Romasz 回答之后,我发现我的问题仅在从模拟器运行应用程序时出现。当在电话上发布时,一切正常。所以可能是加载动态库的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多