gpt4 book ai didi

c# Thread 不会将 Row 添加到 DataGridView CrossThreadError

转载 作者:行者123 更新时间:2023-11-30 22:24:54 25 4
gpt4 key购买 nike

我正在学习 c#,我想知道为什么我的代码不会在 ReceivePacket 区域向我的 DataGridView 添加一行。它在 SendPacket 中有效,但在另一个中无效。目的是简单地将 UDP 数据包发送到机器,在此先感谢。这是我的代码:

private void btnSend_Click(object sender, EventArgs e)
{
SendPacket();
}
private void btnReceiving_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(reciev));
thread.Start();
}

UdpClient client = new UdpClient();

public void SendPacket()
{
byte[] packet = Encoding.ASCII.GetBytes(DateTime.Now.ToString("HH:mm:ss:ff"));
client.Send(packet, packet.Length, tbIP.Text, 444);
dgvSend.Rows.Add(DateTime.Now.ToString("HH:mm:ss:ff"));
}

public void ReceivePacket(byte[] packet)
{// it goes wrong here, because it gives a crossthread error
dgvReceiv.Rows.Add(Encoding.ASCII.GetString(packet), DateTime.Now.ToString("HH:mm:ss:ff"));
}

public void reciev()
{
UdpClient client = new UdpClient(444);
while (true)
{
IPEndPoint server = new IPEndPoint(IPAddress.Any, 0);
byte[] packet = client.Receive(ref server);
ReceivePacket(packet);
}
}

我使用这行代码而不是正常的(通过调用 :) )修复了它:

dgvReceiv.Invoke(new MethodInvoker(delegate { dgvReceiv.Rows.Add(Encoding.ASCII.GetString(packet), DateTime.Now.ToString("HH:mm:ss:ff")); }));

最佳答案

这里是使用委托(delegate)从其他线程调用在主线程上创建的控件上的操作的示例。

http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx

关于c# Thread 不会将 Row 添加到 DataGridView CrossThreadError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12526207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com