数据网格视图:System.InvalidOperationException:'跨线程操作无效:控件''

时间:2018-12-15 09:37:40

标签: c# backgroundworker invoke invokerequired

我试图找到解决这个问题的方法,但是我没有发现或不知道,我是C#的新手

我找到了很多讨论(调用)的解决方案,但是我不知道如何在代码上修复它们,无论find只是标签或文本框的解决方案,如果可能的话,都可以解决问题

“ System.InvalidOperationException:'跨线程操作无效:Control”是从不是在其上创建线程的线程访问的。'”

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]);
            }

        }

1 个答案:

答案 0 :(得分:0)

问题出在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);
    }
}