|
分類:[C#]
初めまして。
タイトルのように、メインフォームから呼び出した進捗フォームのマーキータイプのプログレスバーが動きません。
MainWorkは複数の関数を呼び出したりファイルの入出力を行っているため結構重い処理になっています。
原因はどこにあるのかご教授下さい。宜しくお願いします。環境は、.NET2.0C#です。
#メインフォーム
private void button1_Click(object sender, EventArgs e)
{
ProgressBar pb = new ProgressBar("処理中...",MainWork,"");
DialogResult result = pb.ShowDialog(this);
if (result == DialogResult.Cancel)
{
//キャンセル処理
}
else if (result == DialogResult.OK)
{
//OK処理
}
}
#進捗フォーム
キャンセルボタンとプログレスバーのみ配置しています。
public partial class ProgressBar : Form
{
public ProgressBar (string caption, DoWorkEventHandler doWork, object argument)
{
InitializeComponent();
this.Text = caption;
this.progressBar.Style = ProgressBarStyle.Marquee;
this.progressBar.MarqueeAnimationSpeed = 200;
this.CancelButton = this.cancelAsyncButton;
this.progressBar.Minimum = 0;
this.progressBar.Maximum = 100;
this.cancelAsyncButton.Text = "キャンセル";
this.cancelAsyncButton.Enabled = true;
this.backgroundWorker1.WorkerReportsProgress = true;
this.backgroundWorker1.WorkerSupportsCancellation = true;
workerArgument = argument;
//イベント
this.Shown += new EventHandler(ProgressDialog_Shown);
this.cancelAsyncButton.Click += new EventHandler(cancelAsyncButton_Click);
this.backgroundWorker1.DoWork += doWork;
this.backgroundWorker1.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
}
private object workerArgument = null;
private void ProgressDialog_Shown(object sender, EventArgs e)
{
this.backgroundWorker1.RunWorkerAsync(this.workerArgument);
}
//キャンセルボタンが押されたとき
private void cancelAsyncButton_Click(object sender, EventArgs e)
{
if (!cancelAsyncButton.Enabled) return;
DialogResult result = MessageBox.Show("キャンセルしますか?", "処理中", MessageBoxButtons.OKCancel,MessageBoxIcon.Exclamation);
if (result == DialogResult.OK)
{
cancelAsyncButton.Enabled = false;
backgroundWorker1.CancelAsync();
}
}
//バックグラウンド処理が終了したとき
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
this.DialogResult = DialogResult.Cancel;
}
else
{
this._result = e.Result;
this.DialogResult = DialogResult.OK;
}
this.Close();
}
}
|