C# 如何防止richtextbox在第二次运行后显示相同的字符串
我试图将该字符串显示到richtextbox中,但在第二次运行该字符串后,总是得到相同或重复的字符串,就像在显示第二个字符串的示例中一样 显示第一个字符串的示例: [21:55:07]-[#]正在开始扫描,请稍候 [21:55:09]-[√] 完成了C# 如何防止richtextbox在第二次运行后显示相同的字符串,c#,string,richtextbox,appendtext,C#,String,Richtextbox,Appendtext,我试图将该字符串显示到richtextbox中,但在第二次运行该字符串后,总是得到相同或重复的字符串,就像在显示第二个字符串的示例中一样 显示第一个字符串的示例: [21:55:07]-[#]正在开始扫描,请稍候 [21:55:09]-[√] 完成了 private void Display(string text, bool newLine = true) { DisplayTextBox.AppendText(text); if (newLin
private void Display(string text, bool newLine = true)
{
DisplayTextBox.AppendText(text);
if (newLine)
{
DisplayTextBox.AppendText(Environment.NewLine);
DisplayTextBox.ScrollToCaret();
}
}
private void startScan()
{
Display("...........................................................................................", true);
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ # ] Starting scanning, please wait . . . . . .", true);
Display("...........................................................................................", true);
Display(Environment.NewLine, true);
Thread.Sleep(100);
this.DirButton.Enabled = false;
this.ScanButton.Enabled = false;
scanned = 0;
skipped = 0;
worker.WorkerReportsProgress = true;
worker.DoWork += Scan;
worker.ProgressChanged += this.ProgressChanged;
worker.RunWorkerCompleted += this.RunWorkerCompleted;
worker.RunWorkerAsync();
}
private static void Scan(object sender, DoWorkEventArgs e)
{
startScan(e.Argument.ToString());
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Display(e.UserState.ToString(), true);
}
private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
this.Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ ! ] Exception: " + e.Error.ToString(), true);
}
if (!e.Cancelled)
{
string text = "[ " + DateTime.Now.ToLongTimeString() + " ] - Scanned [ " + scanned + " ] files ";
string text2 = "[ " + DateTime.Now.ToLongTimeString() + " ] - Skipped [ " + skipped + " ] files ";
Display(Environment.NewLine,true);
Display("--------------------------------------------------------------------------------------", true);
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ √ ] Finished.", true);
Display("--------------------------------------------------------------------------------------", true);
Thread.Sleep(100);
if (Form1.skipped > 0)
{
Display(text2,true);
}
else if (Form1.skipped == 0)
{
Display(text2,true);
}
this.Display(text,true);
Display("--------------------------------------------------------------------------------------", true);
Thread.Sleep(100);
DirButton.Enabled = true;
ScanButton.Enabled = true;
return;
}
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ x ] Scanning cancelled", true);
DirButton.Enabled = true;
ScanButton.Enabled = true;
return;
}
private static int scanned = 0;
private static int skipped = 0;
private static BackgroundWorker worker = new BackgroundWorker();
显示第二个字符串的示例:
[21:55:07]-[#]正在开始扫描,请稍候
[21:55:09]-[√] 完成了
private void Display(string text, bool newLine = true)
{
DisplayTextBox.AppendText(text);
if (newLine)
{
DisplayTextBox.AppendText(Environment.NewLine);
DisplayTextBox.ScrollToCaret();
}
}
private void startScan()
{
Display("...........................................................................................", true);
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ # ] Starting scanning, please wait . . . . . .", true);
Display("...........................................................................................", true);
Display(Environment.NewLine, true);
Thread.Sleep(100);
this.DirButton.Enabled = false;
this.ScanButton.Enabled = false;
scanned = 0;
skipped = 0;
worker.WorkerReportsProgress = true;
worker.DoWork += Scan;
worker.ProgressChanged += this.ProgressChanged;
worker.RunWorkerCompleted += this.RunWorkerCompleted;
worker.RunWorkerAsync();
}
private static void Scan(object sender, DoWorkEventArgs e)
{
startScan(e.Argument.ToString());
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Display(e.UserState.ToString(), true);
}
private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
this.Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ ! ] Exception: " + e.Error.ToString(), true);
}
if (!e.Cancelled)
{
string text = "[ " + DateTime.Now.ToLongTimeString() + " ] - Scanned [ " + scanned + " ] files ";
string text2 = "[ " + DateTime.Now.ToLongTimeString() + " ] - Skipped [ " + skipped + " ] files ";
Display(Environment.NewLine,true);
Display("--------------------------------------------------------------------------------------", true);
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ √ ] Finished.", true);
Display("--------------------------------------------------------------------------------------", true);
Thread.Sleep(100);
if (Form1.skipped > 0)
{
Display(text2,true);
}
else if (Form1.skipped == 0)
{
Display(text2,true);
}
this.Display(text,true);
Display("--------------------------------------------------------------------------------------", true);
Thread.Sleep(100);
DirButton.Enabled = true;
ScanButton.Enabled = true;
return;
}
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ x ] Scanning cancelled", true);
DirButton.Enabled = true;
ScanButton.Enabled = true;
return;
}
private static int scanned = 0;
private static int skipped = 0;
private static BackgroundWorker worker = new BackgroundWorker();
[21:55:07]-[#]正在开始扫描,请稍候
[21:55:09]-[√] 完成了
private void Display(string text, bool newLine = true)
{
DisplayTextBox.AppendText(text);
if (newLine)
{
DisplayTextBox.AppendText(Environment.NewLine);
DisplayTextBox.ScrollToCaret();
}
}
private void startScan()
{
Display("...........................................................................................", true);
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ # ] Starting scanning, please wait . . . . . .", true);
Display("...........................................................................................", true);
Display(Environment.NewLine, true);
Thread.Sleep(100);
this.DirButton.Enabled = false;
this.ScanButton.Enabled = false;
scanned = 0;
skipped = 0;
worker.WorkerReportsProgress = true;
worker.DoWork += Scan;
worker.ProgressChanged += this.ProgressChanged;
worker.RunWorkerCompleted += this.RunWorkerCompleted;
worker.RunWorkerAsync();
}
private static void Scan(object sender, DoWorkEventArgs e)
{
startScan(e.Argument.ToString());
}
private void ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Display(e.UserState.ToString(), true);
}
private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
this.Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ ! ] Exception: " + e.Error.ToString(), true);
}
if (!e.Cancelled)
{
string text = "[ " + DateTime.Now.ToLongTimeString() + " ] - Scanned [ " + scanned + " ] files ";
string text2 = "[ " + DateTime.Now.ToLongTimeString() + " ] - Skipped [ " + skipped + " ] files ";
Display(Environment.NewLine,true);
Display("--------------------------------------------------------------------------------------", true);
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ √ ] Finished.", true);
Display("--------------------------------------------------------------------------------------", true);
Thread.Sleep(100);
if (Form1.skipped > 0)
{
Display(text2,true);
}
else if (Form1.skipped == 0)
{
Display(text2,true);
}
this.Display(text,true);
Display("--------------------------------------------------------------------------------------", true);
Thread.Sleep(100);
DirButton.Enabled = true;
ScanButton.Enabled = true;
return;
}
Display("[ " + DateTime.Now.ToLongTimeString() + " ] - [ x ] Scanning cancelled", true);
DirButton.Enabled = true;
ScanButton.Enabled = true;
return;
}
private static int scanned = 0;
private static int skipped = 0;
private static BackgroundWorker worker = new BackgroundWorker();
如何防止它像示例中的第二个字符串那样显示重复的字符串?我认为~您只是想在再次启动扫描时重新启动RichTextBox 如果是,请使用
startScan()开头的方法:
----------编辑----------
每次执行扫描时,您都在连接backgroundworker的事件。这只应执行一次。表单的Load()事件是一个好位置
以下是需要移动且仅调用一次的行:
worker.DoWork += Scan;
worker.ProgressChanged += this.ProgressChanged;
worker.RunWorkerCompleted += this.RunWorkerCompleted;
我已经尝试添加if(DisplayTextBox.Text!=null){DisplayTextBox.Clear();}但仍然没有任何更改,第二次运行扫描按钮时,它将显示相同的两个字符串请参阅上面添加的注释。