これはイベントのコードです。ProgressChanged
イベントとRunWorkerCompleted
イベントです。問題は、progressBarが関数の処理操作が終了する前に100%高速化していることです。ですから、progressBarが最大100%の場合、progressBarは101%にはならないのでエラー例外が発生します。backgroundworkerを使用しようとしていますが、動作しません - なぜですか?
私は何とかprogressBarが処理/進捗状況に従って進捗するようにする必要があります。私はDoWork
イベントの計算に何か問題があると思います。
i = 0;
backgroundWorker1.WorkerSupportsCancellation = true;
backgroundWorker1.WorkerReportsProgress = true;
backgroundWorker1.RunWorkerAsync();
そして、これがBackgroundworker
のイベントです:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
//int currentLength;
//int currentIndex;
//int lastIndex = 0;
string startTag = "T256=\"";
string endTag = "\"";
int startTagWidth = startTag.Length;
//int endTagWidth = endTag.Length;
int index = 0;
h = new StreamReader(@"d:\DeponiaSplit\testingdeponias_Translated.txt");
while ((line = h.ReadLine()) != null)
{
if (index > f.LastIndexOf(startTag))
{
break;
}
int startTagIndex = f.IndexOf(startTag, index);
int stringIndex = startTagIndex + startTagWidth;
index = stringIndex;
int endTagIndex = f.IndexOf(endTag, index);
int stringLength = endTagIndex - stringIndex;
if (stringLength != 0)
{
string test = f.Substring(stringIndex, stringLength);
f = f.Substring(0, stringIndex) + line + f.Substring(stringIndex + stringLength);
if (listBox1.InvokeRequired)
{
textBox1.Invoke(new MethodInvoker(delegate { textBox1.Text = line; }));
}
i = i + 1;
System.Threading.Thread.Sleep(500);
worker.ReportProgress((i * 1));
}
}
h.Close();
StreamWriter w = new StreamWriter(@"D:\New folder (24)\000004aa.xml");
w.AutoFlush = true;
w.Write(f);
w.Close();
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//this.progressBar1.Text = (e.ProgressPercentage.ToString() + "%");
progressBar1.Value = e.ProgressPercentage;
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if ((e.Cancelled == true))
{
this.progressBar1.Text = "Canceled!";
}
else if (!(e.Error == null))
{
this.progressBar1.Text = ("Error: " + e.Error.Message);
}
else
{
this.progressBar1.Text = "Done!";
}
}
なぜdoesnの」私がしたコンストラクタで
Int i;
を:私は追加Form1
トップで
それは正しく動作しますか?今、私はプログレスバーに%
が表示され、ラベルが、私はちょうどにプログレスバー緑色の進行状況を無効にしたくないのProgressBarに応じて移動するラベルを追加したいのFileStream
を使用して作業する
%
を追加し、数値をパーセンテージで示します。
だから私がやったProgressChanged
イベントに:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
label3.Text = (e.ProgressPercentage.ToString() + "%");
}
しかし、それは動作しません - label13
は%が、私は1%のようなものを見たいと思って1に変更だけで移動していません... 2%... 3%...などです。どうしたらいいですか?
ここからわかるように、行が読み込まれるたびにプログレスバーを更新したいですか? – Tudor
「しない」を短くしたい場合は、あなたが常時使用しているように、 'dosent'ではなく' doesn't'を取得します。 –
新しい質問が正しく表示されますか?ラベルには1%、2%、3%の代わりに%、1、2、3が表示されますか?たぶん、label.Widthが正しくないので、コンテンツがカットされていますか?あなたはlabel.AutoSizeを試すことができます... – Hinek