ToolStripProgressBar
私は最近、コントロールに含まれるコントロールを介してステータス バーに別のスレッドの進行状況を表示したいアプリケーションに取り組んでいますStatusBar
。このコードを追加しようとする前に、もともとコントロールのテキストを変更するコードを持っていましたToolStripStatusLabel
。これを行うには、デリゲートで Invoke メソッドを使用し、すべて正常に機能しました。ToolStripProgressBar
ただし、ステータスバーのメソッドへの呼び出しでこれを試みたときに、通知なしで失敗したことがわかりましたInvoke
(エラーなし、例外なし、何もありません)。私が学んだことは、このように進行状況バーを使用するには、BackgroundWorker
コントロールを使用する必要があるということです。Invoke
私のコードは機能しますが、すでに機能しているように見えるメソッドを使用できなかった理由がわかりません。
何が機能し、何が機能しなかったかの例:
これはうまくいきました
public delegate void changeStatusMessage(String message);
public changeStatusMessage changeStatusMessageDelegate;
public void changeStatusMessageMethod(String message){
if(statusbar.InvokeRequired){
statusbar.Invoke(changeStatusMessageDelegate, new Object[] {message});
}else{
toolstripLabel.Text = message;
}
}
これはうまくいきませんでした
public delegate void incrementProgressBar(int value);
public incrementProgressBar incrementProgressBarDelegate;
public void incrementProgressBarMethod(int value){
if(statusbar.InvokeRequired){
statusbar.Invoke(incrementProgressBarDelegate, new Object[] {value});
}else{
toolstripProgress.Increment(value);
}
}
機能しなかった例では、InvokeRequired
プロパティが true であるため、Invoke
メソッドが呼び出されても何も起こりません。incrementProgressBarMethod
ここで、今度は whereInvokeRequired
が false であるため、Increment
メソッドを起動できるように再度呼び出すと予想していました。
なぜこれがうまくいかないのか本当に知りたいです。私が言ったように、私はすでに を使用するように改造しましたBackgroundWorker
。説明が欲しいだけです。