2016-06-13 32 views
0

XAMLとC#の新機能です。プログレスバーを更新する方法を理解しようとしています。ProgressBarに値の変更が反映されないC#

私はXAMLに次のコードを持っている:私は、デバッガを実行するとProgress1.Valueが正しく更新ようだが、プログレスバーがないC#で

private void Launch_Click(object sender, RoutedEventArgs e) 
{ 
    for(int i = 0; i<10; i++) 
    { 
     Progress1.Value +=0.1; 
    } 

} 

<Hyperlink Click="Launch_Click">Launch Program</Hyperlink> 
<ProgressBar x:Name="Progress1" x:Uid="Progress1" Minimum="0" Maximum="1" Value="0"> 

そしてLaunch_Clickの実装をLaunch_Clickの実行が終了するまでこの変更が反映されているようです。 Progress1.Valueが更新されると、プログレスバーに変更を反映させる方法を教えてください。

+0

のようにコードを変更です。さらに、リフレッシュしても、ループは非常に高速に完了します。たった100回の反復があり、1ミリ秒未満で完了します。 – Rob

+0

こんにちは、ロブ、コメントをいただきありがとうございます、私はループが非常に速く完了したことを理解しますが、デバッガでは、進行状況バーが更新されていないことを確認するのは簡単です。私はそれがリフレッシュイベントとは関係があると思う、forループの進行状況バーにメッセージボックスを表示するとb/cが正しく更新されます。イベントを更新するにはどうすればよいですか?ありがとう! – Yituo

答えて

1

非同期は、すべてのUI関連アクティビティが通常1つのスレッドを共有するため、UIスレッドにアクセスするアプリケーションにとって特に価値があることを証明します。いずれかのプロセスが同期アプリケーションでブロックされていると、すべてがブロックされます。アプリケーションが応答を停止し、代わりに待機しているときにアプリケーションが失敗したと判断することがあります。

非同期メソッドを使用すると、アプリケーションは引き続きUIに応答します。たとえば、ウィンドウのサイズを変更したり、ウィンドウを最小化したり、アプリケーションが終了するのを待たないようにするには、アプリケーションを閉じることができます。

C#のasyncawaitキーワードは、非同期プログラミングの心臓部です。これらの2つのキーワードを使用すると、.NET FrameworkまたはWindowsランタイムのリソースを使用して、同期メソッドを作成するのと同じくらい簡単に非同期メソッドを作成できます。 asyncとawaitを使用して定義する非同期メソッドは、非同期メソッドと呼ばれます。

だから、あなたが必要なのは次のリフレッシュイベントが更新を描く前に、あなたのループが完全に実行されます。この

public async void button1_Click(object sender , EventArgs e) 
{ 
    for(int i=0;i<100;i++) 
    { 
     Progress1.Value +=1; 
     await Task.Delay(10); 
    } 
} 
+0

こんにちは、あなたのコメントのおかげで、これらのチュートリアルのアイデアが私の問題にどのように適用されるかについての情報をもっと少し与えることができますか?申し訳ありませんが、私はC#とXAMLの新機能ですので、問題を解決するための一般的な方法をガイダンスで教えてください。記事を読んで適用しましょう。ありがとうございます! – Yituo

+0

私は答えを編集しました – mohsen

関連する問題