c# - 使用backgroudWorker C#时出现跨线程操作错误
问题描述
我想在使用 backgroundWorker 将数据提取到文本框时显示一个进度条。但是在调试时,它引发了以下错误:
我已经阅读了类似的案例,但它无法解决我的问题。
System.InvalidOperationException:跨线程操作对 Texbox txtResults 无效。
我是 C# 新手,请帮助我!谢谢!
private void btnCheckProcStep_Click(object sender, EventArgs e)
{
lblStatus.Text = "";
if (backgroundWorker1.IsBusy)
{
backgroundWorker1.CancelAsync();
}
else
{
progressBar1.Visible = true;
progressBar1.Value = progressBar1.Minimum;
backgroundWorker1.RunWorkerAsync();
}
}
private void SetText(string text)
{
if (this.txtResults.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText);
this.Invoke(d, new object[] { text });
}
else
{
this.txtResults.Text = text;
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
try
{
txtResults.Clear();
DataTable dtx = new DataTable();
foreach (DataGridViewRow row in grdMametanCheckList.Rows)
{
var _MAMETAN_NO = row.Cells[0].Value.ToString();
dtx = get_Missing_Proc_Inst_Seq(_MAMETAN_NO);
foreach (DataRow dr in dtx.Rows)
{
txtResults.Text += row.Cells[0].Value.ToString() + "," + dr[0].ToString() + Environment.NewLine;
}
}
for (int i = 0; i <= 100; i++)
{
SetText(i.ToString() + " %");
backgroundWorker1.ReportProgress(i);
System.Threading.Thread.Sleep(100);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (!backgroundWorker1.CancellationPending)
{
lblStatus.Text = "Processing ... " + e.ProgressPercentage + "%";
progressBar1.Value = e.ProgressPercentage;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
lblStatus.Text = e.Error.Message;
}
else
{
lblStatus.Text = "Done";
progressBar1.Value = 0;
progressBar1.Visible = false;
}
}
backgroundWorker DoWork 时发生错误。
已编辑:添加
foreach (DataRow dr in dtx.Rows)
{
txtResults.Text += row.Cells[0].Value.ToString() + "," + dr[0].ToString() + Environment.NewLine;
SetText(txtResults.Text.ToString());
}
解决方案
推荐阅读
- reactjs - 从渲染的类对象访问类函数
- node.js - 异步猫鼬查询的问题
- python - Pandas 中具有 dtype 对象的系列的类型计数
- arrays - Matlab:arrayfun,两个矩阵X,Y作为向量的分量
- qt - 如何将 Qdialog 中的信号连接到 QMainwindow 中的插槽
- django - 从应用程序内部调用 Django allauth 自定义注册视图
- reactjs - 如何在 React.js 中按名称动态包含图像
- sql-server - SQL Server 存储过程中的 If Else 语句不起作用
- python - 如何修复在绘图时显示数据但在使用破折号运行时显示为空的绘图图?
- customization - 反向传播时自定义损失函数变为零