2013-03-27 5 views
1

Первое:Почему Popup не отображается?

public MainPage() 
{ 
    InitializeComponent(); 

    this.Loaded += new RoutedEventHandler(MainPage_Loaded); 
} 

void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 
    Verdienen v = new Verdienen(4, 3); 
} 

, а затем: общественного Verdienen (интермедиат attesaInSecondiIniziale = 20, Int attesaInSecondiFinale = 8) { this.AttesaInSecondiIniziale = attesaInSecondiIniziale; this.AttesaInSecondiIniziale = attesaInSecondiFinale; MostraPerQuestaSezione = false;

 popup = new Popup(); 
     Border border = new Border(); 
     border.Background = new SolidColorBrush(Colors.LightGray); 
     border.Margin = new Thickness(3); 
     StackPanel panelVerticale = new StackPanel(); 
     panelVerticale.Orientation = Orientation.Vertical; 
     AdControl control = new AdControl(); 
     panelVerticale.Children.Add(control); 
     StackPanel panelOrizzontale = new StackPanel(); 
     panelOrizzontale.Orientation = Orientation.Horizontal; 
     Button bAltreApp = new Button(); 
     bAltreApp.Content = ""; 
     bAltreApp.Tap += new EventHandler<GestureEventArgs>(bAltreApp_Tap); 
     Button bVota = new Button(); 
     bVota.Tap += new EventHandler<GestureEventArgs>(bVota_Tap); 
     bVota.Content = ""; 
     panelOrizzontale.Children.Add(bAltreApp); 
     panelOrizzontale.Children.Add(bVota); 
     panelVerticale.Children.Add(panelOrizzontale); 
     border.Child = panelVerticale; 
     popup.Child = border; 

     this.ShowPopup(); 
    } 

    private async **System.Threading.Tasks.TaskEx** ShowPopup() 
    { 
     do 
     { 
      Debug.WriteLine("thread iniziato. pausa cominciata"); 
      await System.Threading.Tasks.TaskEx.Delay(1000 * this.AttesaInSecondiIniziale); 
      Debug.WriteLine("thread: fine pausa"); 
      popup.IsOpen = true; 
      await System.Threading.Tasks.TaskEx.Delay(1000 * this.AttesaInSecondiFinale); 
      popup.IsOpen = false; 
     } while (MostraPerQuestaSezione); 
    } 

Можете ли вы сказать мне, почему этот код не показывает всплывающее окно? Примечание: некорректного кода нет! EDIT: Обратите внимание, что System.Threading.Tasks.TaskEx помечен как ошибка («Состояние возврата метода async должно быть недействительным, задача или задача»).

+0

Если код ShowPopup ? – zzfima

+0

Я обновил код. Пожалуйста, посмотрите еще раз! – Spode

ответ

0

Когда вы используете Thread.Sleep, вы блокируете насос сообщения пользовательского интерфейса. Это не позволяет системе отображать всплывающее окно, так как оно не будет отображаться, пока оно не сможет правильно обрабатывать сообщения.

Лучше было бы, чтобы переместить это в метод асинхронным, и назвать его после строительства:

public async Task ShowPopup(int attesaInSecondiIniziale = 20, int attesaInSecondiFinale = 8) 
{ 
    // Your code... 

    do 
    { 
     await Task.Delay(1000 * this.AttesaInSecondiIniziale); 
     this.ShowPopup(); 
     await Task.Delay(1000 * this.AttesaInSecondiIniziale); 
     this.HidePopup();  
    } 
    while (MostraPerQuestaSezione); 
} 

С помощью Task.Delay с await в методе асинхронным, не будет блокировать пользовательский интерфейс. Однако для этого потребуется ориентировать WP7.5 на async targeting pack.

+0

ok ... Но как вы добавляете System.Threading.Tasks? Я могу добавить только System.Threading ... Я использовал «PM> Install-Package System.Threading.Tasks -Pre» в моем проекте, но он не добавлен ... – Spode

+0

ok! Просто перезагрузили SDK! – Spode

+0

Извините, но он, кажется, ждет Task.Delay (int) начнется только с WP8 – Spode

0
this.ShowPopup(); ... 
this.HidePopup(); 

должна быть

popup.ShowPopup(); ... 
popup.HidePopup(); 

Вы звоните this и в этом контексте this является Verienen объекта и у вас нет

ShowPopup() или HidePopup() метод

+0

Нет ... Я не верю, что это может быть решение, потому что я объявлял всплывающее всплывающее окно как глобальную переменную. Благодаря! =) – Spode

+0

что это такое? если он не ссылается на объект «Verdienen()», то мое понимание C# и OOP уходит. разрабатывать! – sircapsalot

+0

Да, это относится к экземпляру Вердиенена. Но именно в этом классе я объявлял Popup popup как глобальный объект;) – Spode