WindowsMobileのすべてのプロセスでプログレスバー/待機メッセージを表示したい。「お待ちください...」という簡単なテキストを表示して、Application.DoEvents()と記述しましたが、表示されず、プログレスバーも表示されません。
Windows Mobileデバイスでプログレスバーを表示するために従う必要のある方法やその他のことはありますか?
WindowsMobileのすべてのプロセスでプログレスバー/待機メッセージを表示したい。「お待ちください...」という簡単なテキストを表示して、Application.DoEvents()と記述しましたが、表示されず、プログレスバーも表示されません。
Windows Mobileデバイスでプログレスバーを表示するために従う必要のある方法やその他のことはありますか?
タイマーを使用して、プロジェクトに静的文字列を配置します。
テキストを表示したくない場合は、文字列値をnullに設定します。
タイマーが約200ミリ秒ごとに起動したら、メッセージを更新します。
private static string message = null;
private void timer_Tick(object sender, EventArgs e) {
if (String.IsNullOrEmpty(message)) {
// clear your form values
} else {
// set your form values
}
}
もちろん、プログレスバーが必要な場合は、これも実行できます。プログレスバーの静的int値を作成し、上記のコードスニペットでタイマーが作動したときにコントロールを更新するだけです。
これはスレッドとイベントハンドラーでも実行できますが、タイマー(クリックしてコード例を表示)が最も簡単な方法です。
アップデート:
これをインラインコードとして実行している場合(コメントからわかるように)、次のことを試してください。
private void Demo(int max) {
label1.Text = String.Empty;
progressBar1.Value = 0;
progressBar1.Maximum = max;
progressBar1.Refresh();
do {
progressBar1.Value++;
progressBar1.Refresh();
label1.Text = String.Format("{0}", progressBar1.Value);
label1.Refresh();
} while (progressBar1.Value < progressBar1.Maximum);
}
上記のコードが必要なことを実行するかどうかを確認してください。
注:ああ、Application.DoEvents()を削除します。これは、開発者が何が起こっているのかわからないようにする邪悪なVBの作成です。
実行しているプロセスがUIスレッドをブロックしていますか?
スレッドプールで重いプロセスを実行してみてください。
これを試して
void StartLoadingPanel()
{
this.BeginInvoke((Action)delegate()
{
Cursor.Current = Cursors.WaitCursor;
loadingPanelContainer.Visible = true;
});
}
ここで、loadingPanelContainerには、表示されるテキストが含まれています。