[C#.net]スレッド化された別フォームのプログレスバーの操作方法について
こんちは。最近C#をやり始めて行き詰まったので質問致します。
質問内容に対する答えをお持ちの方がいらっしゃいましたら、お暇な時にでもお答えください。
public Class SumLoop {
public Keisan(int Cnt, string Msg) {
// (1)プログレスバーのフォーム生成時に変数Cntをプログレスバーの最大値、変数Msgをフォームのタイトルに設定したい。
FormProgress FrmPro = new FormProgress();
Thread thread = new Thread(new ThreadStart((2)) );
thread.Start();
for(int i=0; i<Cnt; i++) {
// (3)このiがインクリメントする度にプログレスバーのValueを増やしたい
// FrmPro.SetProgressValue(i) // これだとコンパイラに怒られた
// ここに主な処理
}
}
public partial class FormProgress : System.Windows.Forms.Form {
public FormDfmProgress() { InitializeComponent(); }
// (3)これではダメみたい
public void SetprogressValue(int iValue) {
progressBar1.Value = iValue;
progressBar1.Refresh();
}
// (4)他のイベントが必要?
}
ざっと汚いコードを書きましたが具体的にお知恵を貸して頂きたいところは
(1)のフォーム生成時のパラメータをどう与えるのか?
インスタンス作成の際にここで言うFormDfmProgressをthisで継承させオーバーロードさせれば良いんでしょうか?
(2)プログレスバーのフォームを表示させたいだけなのですが、.ShowDialog()では怒られ、.Showでは即座にフォームが消えたりでどうにもなりません。スレッドが消えるまで表示させるにはどうしたらいいでしょう?
(3)フォーム側のプログレスバーのValueなり、変数なりをスレッド稼動中に更新させるにはどうしたらいいでしょうか?
(4)は、大して気にしていないのですが、これが致命的に足りない!とかいうのがあればご指導願います。
以上長々となりましたが、お暇な方お力を御貸しください