任务延迟不等待(windowsphone8个申请)
Task delay not waiting (windows phone 8 application)
我正在尝试执行一个非常简单的任务。我使用 VS Express 2013 开始了一个新项目,选择了 Windows Phone 8 应用程序(而不是 Silverlight)。
在 xaml 一侧,界面包含一个按钮和一个矩形。
我想要做的是:单击按钮时,矩形将填充绿色背景,然后 1 秒后,背景将变为红色。最后,按钮中的文本更改为 "FINISHED",只是为了检查所有内容是否按正确的顺序运行。
起初,我尝试使用 Thread.Sleep 方法,但如果我理解得很好,这个 "works" 只适用于 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 阻塞?)只发生在第一次点击按钮时
根据 Romasz 的回答,我发现我的问题仅在 运行 来自模拟器的应用程序时出现。当与 phone 相关时,一切正常。所以应该是加载动态库的问题
我正在尝试执行一个非常简单的任务。我使用 VS Express 2013 开始了一个新项目,选择了 Windows Phone 8 应用程序(而不是 Silverlight)。 在 xaml 一侧,界面包含一个按钮和一个矩形。 我想要做的是:单击按钮时,矩形将填充绿色背景,然后 1 秒后,背景将变为红色。最后,按钮中的文本更改为 "FINISHED",只是为了检查所有内容是否按正确的顺序运行。 起初,我尝试使用 Thread.Sleep 方法,但如果我理解得很好,这个 "works" 只适用于 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 阻塞?)只发生在第一次点击按钮时
根据 Romasz 的回答,我发现我的问题仅在 运行 来自模拟器的应用程序时出现。当与 phone 相关时,一切正常。所以应该是加载动态库的问题