Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从线程向DataGridView添加行_C#_Datagridview_Multithreading - Fatal编程技术网

C# 从线程向DataGridView添加行

C# 从线程向DataGridView添加行,c#,datagridview,multithreading,C#,Datagridview,Multithreading,我想从两个独立的线程向DataGridView添加行。我试着和代表们一起做一些事情,但没有成功 这是我的行更新程序函数,它是从线程中的另一个函数调用的 public delegate void GRIDLOGDelegate(string ulke, string url, string ip = ""); private void GRIDLOG(string ulke, string url, string ip = "") { if (this.I

我想从两个独立的线程向DataGridView添加行。我试着和代表们一起做一些事情,但没有成功

这是我的行更新程序函数,它是从线程中的另一个函数调用的

    public delegate void GRIDLOGDelegate(string ulke, string url, string ip = "");
    private void GRIDLOG(string ulke, string url, string ip = "")
    {

        if (this.InvokeRequired)
        {
            // Pass the same function to BeginInvoke,
            // but the call would come on the correct
            // thread and InvokeRequired will be false.
            object[] myArray = new object[3];

            myArray[0] = ulke;
            myArray[1] = url;
            myArray[2] = ip;

            this.BeginInvoke(new GRIDLOGDelegate(GRIDLOG),
                                             new object[] { myArray });

            return;
        }

        //Yeni bir satır daha oluştur
        string[] newRow = new string[] { ulke, url, ip };
        dgLogGrid.Rows.Add(newRow);
    }

您需要传递参数数组。 您在呼叫此时出错。BeginInvoke

试着这样做:

this.BeginInvoke(new GRIDLOGDelegate(GRIDLOG), new object[] { ulke, url, ip });

其他一切似乎都是正确的。

您需要传递参数数组。 您在呼叫此时出错。BeginInvoke

试着这样做:

this.BeginInvoke(new GRIDLOGDelegate(GRIDLOG), new object[] { ulke, url, ip });

其他一切似乎都是正确的。

希望这有帮助=]

private object[] DatagridBuffer(Person p)
{
    object[] buffer = new object[1];
    buffer[0] = p.FirstName;
    buffer[1] = p.LastName;
    return buffer;
{

public void ListPeople() 
{
    List<DatagridViewRow> rows = new List<DataGridViewRow>();
    Dictionary<int, Person> list = SqlUtilities.Instance.InstallationList();
    int index = 0;
    foreach (Person p in list.Values) {
        rows.Add(new DataGridViewRow());
        rows[index].CreateCells(datagrid, DatagridBuffer(p));
        index += 1;
    }
    UpdateDatagridView(rows.ToArray());
}

public delegate void UpdateDatagridViewDelegate(DataGridViewRow[] list);
public void UpdateDatagridView(DataGridViewRow[] list)
{
    if (this.InvokeRequired)
    {
        this.BeginInvoke(
             new UpdateDatagridViewDelegate(UpdateDatagridView), 
             new object[] { list }
        );
    }
    else
    {
        datagrid.Rows.AddRange(list);
    }
}
private object[]DatagridBuffer(个人p)
{
对象[]缓冲区=新对象[1];
缓冲区[0]=p.FirstName;
缓冲区[1]=p.LastName;
返回缓冲区;
{
公众人物()
{
列表行=新列表();
Dictionary list=SqlUtilities.Instance.InstallationList();
int指数=0;
foreach(列表值中的人员p){
添加(新的DataGridViewRow());
行[index].CreateCells(datagrid,DatagridBuffer(p));
指数+=1;
}
UpdateDatagridView(rows.ToArray());
}
公共委托void UpdateDatagridViewDelegate(DataGridViewRow[]列表);
public void UpdateDagRidView(DataGridViewRow[]列表)
{
if(this.invokererequired)
{
这是我的开始(
新的UpdateDagRidViewDelegate(UpdateDagRidView),
新对象[]{list}
);
}
其他的
{
datagrid.Rows.AddRange(列表);
}
}

如果您发现我的代码不正确,或者可以改进,请发表评论。

希望这对您有所帮助=]

private object[] DatagridBuffer(Person p)
{
    object[] buffer = new object[1];
    buffer[0] = p.FirstName;
    buffer[1] = p.LastName;
    return buffer;
{

public void ListPeople() 
{
    List<DatagridViewRow> rows = new List<DataGridViewRow>();
    Dictionary<int, Person> list = SqlUtilities.Instance.InstallationList();
    int index = 0;
    foreach (Person p in list.Values) {
        rows.Add(new DataGridViewRow());
        rows[index].CreateCells(datagrid, DatagridBuffer(p));
        index += 1;
    }
    UpdateDatagridView(rows.ToArray());
}

public delegate void UpdateDatagridViewDelegate(DataGridViewRow[] list);
public void UpdateDatagridView(DataGridViewRow[] list)
{
    if (this.InvokeRequired)
    {
        this.BeginInvoke(
             new UpdateDatagridViewDelegate(UpdateDatagridView), 
             new object[] { list }
        );
    }
    else
    {
        datagrid.Rows.AddRange(list);
    }
}
private object[]DatagridBuffer(个人p)
{
对象[]缓冲区=新对象[1];
缓冲区[0]=p.FirstName;
缓冲区[1]=p.LastName;
返回缓冲区;
{
公众人物()
{
列表行=新列表();
Dictionary list=SqlUtilities.Instance.InstallationList();
int指数=0;
foreach(列表值中的人员p){
添加(新的DataGridViewRow());
行[index].CreateCells(datagrid,DatagridBuffer(p));
指数+=1;
}
UpdateDatagridView(rows.ToArray());
}
公共委托void UpdateDatagridViewDelegate(DataGridViewRow[]列表);
public void UpdateDagRidView(DataGridViewRow[]列表)
{
if(this.invokererequired)
{
这是我的开始(
新的UpdateDagRidViewDelegate(UpdateDagRidView),
新对象[]{list}
);
}
其他的
{
datagrid.Rows.AddRange(列表);
}
}

如果您发现我的代码不正确或可以改进,请发表评论。

您可以使用以下代码:

   private void GRIDLOG(string ulke, string url, string ip = "")
    {
        object[] myArray = new object[] { ulke, url, ip};
        if (this.InvokeRequired)
            dgLogGrid.Invoke((MethodInvoker)(() => dgLogGrid.Rows.Add(myArray)));
        else dgLogGrid.Rows.Add(myArray);
    }

您可以使用以下代码:

   private void GRIDLOG(string ulke, string url, string ip = "")
    {
        object[] myArray = new object[] { ulke, url, ip};
        if (this.InvokeRequired)
            dgLogGrid.Invoke((MethodInvoker)(() => dgLogGrid.Rows.Add(myArray)));
        else dgLogGrid.Rows.Add(myArray);
    }

它怎么不工作?它编译了吗?你有任何异常吗?它怎么不工作?它编译了吗?你有任何异常吗?