1

初め:

public MainPage()
{
    InitializeComponent();

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

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

次に: public Verdienen(int 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);
    }

このコードでポップアップが表示されない理由を教えてください。注: 一部の不要なコードは存在しません! 編集: System.Threading.Tasks.TaskExがエラーとしてマークされていることに注意してください (「非同期メソッドの戻り状態は void、Task、または Task でなければなりません」)。

4

2 に答える 2

0

を使用するThread.Sleepと、UI メッセージ ポンプがブロックされます。これにより、メッセージが正しく処理されるまでポップアップが表示されないため、システムがポップアップを表示できなくなります。

より良いアプローチは、これを非同期メソッドに移動し、構築後に呼び出すことです。

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非同期メソッドでwithを使用するとawait、UI をブロックしません。ただし、これにはasync ターゲティング パックを使用して WP7.5 をターゲットにする必要があります。

于 2013-03-27T16:14:32.457 に答える
0
this.ShowPopup(); ...
this.HidePopup();

する必要があります

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

あなたは呼び出しthisており、この文脈でthisVerienenオブジェクトであり、あなたは何も持っていません

ShowPopup()またはHidePopup()メソッド

于 2013-03-27T16:14:44.147 に答える