2016-10-05 9 views
-1

私はC#開発の新人ですが、私はタイマーを組み込んだ子供のためのゲームを書こうとしています。私はMicrosoft Visual Studio Community 2015(バージョン14.0.25431.01アップデート3)を使用しています。私は「空白」テンプレートを使用しています。ユニバーサルWindows「Windows 10 Anniversary Edition(10.0; Build 14393)」をターゲットにしています。C#を使ってVisual Studioでゲームにタイマーを組み込もうとしています

MainPage.xamlで、私はツールボックスをクリックし、下にあるコードに表示される「Timer」コントロールを選択でき、MainPage.xamlで参照することができると想定しました.cs。

ただし、「すべてのXAMLコントロール」のリストから選択できる「タイマー」コントロールはなく、MainPage.xaml.csに「using System.Timers」を挿入しようとすると表示されませんそれを認識すること。

私が必要とするのは、「開始」ボタンが押されたときにタイマーを起動し、「タイムアウト」前に一定の秒数を入力して次の質問に移動することです。

すべてのポインタは非常に感謝して受け取ります!

+0

クイックGoogle検索:https://msdn.microsoftを。 com/ja-us/library/system.timers.timer%28v = vs.110%29.aspx?f = 255&MSPPError = -2147217396 – Abion47

答えて

-1

あなたはWinFormsまたはVB6のドラッグアンドドロップインターフェイスでのプログラミングに慣れているようですね...あなたが何を記述しているかを達成するには、XAMLでボタンと入力コントロールが必要になり、タイマーがコード内にあります-behind(MVVMに従っていれば、あなたのビューモデルで生きるでしょう)。この単純な実装は、次のようになります。

MainPage.xamlを

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition></RowDefinition> 
     <RowDefinition></RowDefinition> 
     <RowDefinition></RowDefinition> 
    </Grid.RowDefinitions> 
    <Button Grid.Row="0" x:Name="StartButton" HorizontalAlignment="Stretch" Content="Start" Click="StartButton_Click" /> 
    <TextBox Grid.Row="1" x:Name="InputField" HorizontalAlignment="Stretch" ></TextBox> 
    <TextBlock Grid.Row="2" x:Name="StatusText" HorizontalAlignment="Stretch"></TextBlock> 
</Grid> 

MainPage.xaml.cs

using System.Threading; 
using Window.UI.Xaml; 
using Window.UI.Xaml.Controls; 

namespace UniversalTimerApp 
{ 
    public sealed partial class MainPage : Page 
    { 
     private Timer questionTimer; 
     public MainPage() 
     { 
      this.InitializeComponent(); 

      this.questionTimer = new Timer(this.EndOfTimer, null, Timeout.Infinite, Timeout.Infinite); 
     } 

     private void StartButton_Click(object sender, RoutedEventArgs e) 
     { 
      this.questionTimer.Change(3000, Timeout.Infinite); 
      this.StatusText.Text = "Timer Started!"; 
     } 

     private async void EndOfTimer(object state) 
     { 
      await this.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal,() => 
      { 
       this.InputField.IsEnabled = false; 
       this.StatusText.Text = "Timer Ended."; 
      }); 
     } 
    } 
} 
+0

Samありがとうございます。あなたが提案したものを試しましたが、スタートボタンをクリックすると、約5秒遅れて次のエラーが表示されます。 – Richard

+0

ありがとうSam。あなたが提案したことを試してみましたが、「開始」ボタンをクリックすると、約5秒間遅れて次のエラーが表示されます:「ユーザーコードによって例外が処理されませんでした。 (HRESULTからの例外:0x800101E(RPC_E_WRONG_THREAD)) " – Richard

+0

@リチャード私はUI更新コードを実行するための私の答えを更新しました。 EndOfTimerメソッドをUIスレッドで使用して、そのエラーが発生しないようにします。それがあなたのために働くかどうかお知らせください。 – sam2929

関連する問題