数据网格视图:System.InvalidOperationException:'Cross-thread operation not valid: Control ''
Data Grid View : System.InvalidOperationException: 'Cross-thread operation not valid: Control ''
我试图找到解决这个问题的方法,但我没有找到或不知道,我是 C# 的新手
我找到了很多关于(调用)的解决方案,但我不知道如何在我的代码中修复它们,如果找到的一切都只是标签或文本框的解决方案,如果可能的话解决问题
"System.InvalidOperationException: 'Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.'"
Error Message Image
for (int i = 0; i <= len - 1; i++)
{
if (i % 3 == 0)
{
split = proxy[proxy_counter].Split(':');
num.Rows.Add(numlist[i], 0, 0, split[0], split[1], split[2], split[3]);
proxy_counter++;
}
else
{
num.Rows.Add(numlist[i], 0, 0, split[0], split[1], split[2], split[3]);
}
}
问题出在 MessageBox.Show
。您不能从后台线程更改 UI。为此,您需要 Invoke
(如您所说)主线程中的 MessageBox.Show
。
更改您的 MessageBox 行(假设那段代码在 Windows 表单中):
InvokeIfRequired(() =>
{
MessageBox.Show("You Enter Less Than 6 Numbers!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
});
private void InvokeIfRequired(Action method)
{
if (this.InvokeRequired)
{
Invoke(method);
}
}
我试图找到解决这个问题的方法,但我没有找到或不知道,我是 C# 的新手
我找到了很多关于(调用)的解决方案,但我不知道如何在我的代码中修复它们,如果找到的一切都只是标签或文本框的解决方案,如果可能的话解决问题
"System.InvalidOperationException: 'Cross-thread operation not valid: Control '' accessed from a thread other than the thread it was created on.'"
Error Message Image
for (int i = 0; i <= len - 1; i++)
{
if (i % 3 == 0)
{
split = proxy[proxy_counter].Split(':');
num.Rows.Add(numlist[i], 0, 0, split[0], split[1], split[2], split[3]);
proxy_counter++;
}
else
{
num.Rows.Add(numlist[i], 0, 0, split[0], split[1], split[2], split[3]);
}
}
问题出在 MessageBox.Show
。您不能从后台线程更改 UI。为此,您需要 Invoke
(如您所说)主线程中的 MessageBox.Show
。
更改您的 MessageBox 行(假设那段代码在 Windows 表单中):
InvokeIfRequired(() =>
{
MessageBox.Show("You Enter Less Than 6 Numbers!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
});
private void InvokeIfRequired(Action method)
{
if (this.InvokeRequired)
{
Invoke(method);
}
}