Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/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中)_C#_Sockets_Datagridview - Fatal编程技术网

C# 将从套接字读取的数据添加到DataGridView(在c中)

C# 将从套接字读取的数据添加到DataGridView(在c中),c#,sockets,datagridview,C#,Sockets,Datagridview,我使用C创建了一个套接字侦听器。我想在DataGridWiew中立即列出在这个套接字上读取的数据。 大约每秒100个数据通过这个套接字传输 我成功地读取了套接字上的数据,但在尝试立即在DataGridView上列出数据时,屏幕冻结,直到数据流停止。 当数据流停止时,所有数据都列在DataGridView上。但是,我希望DataGridView在添加数据时能够成功地连续刷新 有没有办法在DataGridView中立即成功列出这么多数据 我在哪里犯错 守则: frm.loggGrid

我使用C创建了一个套接字侦听器。我想在DataGridWiew中立即列出在这个套接字上读取的数据。 大约每秒100个数据通过这个套接字传输 我成功地读取了套接字上的数据,但在尝试立即在DataGridView上列出数据时,屏幕冻结,直到数据流停止。 当数据流停止时,所有数据都列在DataGridView上。但是,我希望DataGridView在添加数据时能够成功地连续刷新

有没有办法在DataGridView中立即成功列出这么多数据

我在哪里犯错

守则:

        frm.loggGridView.ColumnCount = 5;
        frm.loggGridView.ColumnHeadersVisible = true;
        DataGridViewCellStyle columnHeaderStyle = new DataGridViewCellStyle();
        columnHeaderStyle.BackColor = Color.Beige;
        columnHeaderStyle.Font = new Font("Verdana", 10, FontStyle.Bold);
        frm.loggGridView.ColumnHeadersDefaultCellStyle = columnHeaderStyle;

        frm.loggGridView.Columns[0].Name = "ID";
        frm.loggGridView.Columns[1].Name = "LATITUDE";
        frm.loggGridView.Columns[2].Name = "LONGITUDE";
        frm.loggGridView.Columns[3].Name = "ALTITUDE";
        frm.loggGridView.Columns[4].Name = "TIME";


        int i= 0;
        try
        {
            PointF p1;
            while (true)
            {

                byte[] bytes = listener.Receive(ref groupEP);
                String FlightData = Encoding.UTF8.GetString(bytes, 0, bytes.Length);

                //  Console.WriteLine("broadcast veri {0} :\n {1}\n", groupEP.ToString(), FlightData);

                String[] FlightDataSplit = FlightData.Split(' ', '\n');
                p1 = new PointF(FlightDataSplit[1], FlightDataSplit[0], FlightDataSplit[2]);

                frm.loggGridView.Rows.Add();

                frm.loggGridView.Rows[i].Cells[0].Value = i;

                frm.loggGridView.Rows[i].Cells[1].Value = p1.latitude;

                frm.loggGridView.Rows[i].Cells[2].Value = p1.longitude;

                frm.loggGridView.Rows[i].Cells[3].Value = p1.altitude;

                frm.loggGridView.Rows[i].Cells[4].Value = DateTime.Now;

               i++;


            }


        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

我试图模拟一个快速的LINQPad示例。这将继续在后台添加新结果,而不会冻结应用程序

//简单GridView控件 DataGridView gridView=new System.Windows.Forms.DataGridView; gridView.Columns.AddA,A; gridView.Columns.AddB,B; gridView.Columns.AddC,C; //在LINQPad中显示控件 PanelManager.DisplayControlgridView; 等待任务。Runasync=> { whiletrue { //您的侦听器代码 var results=Enumerable.range0100.Selectx=>x.ToList; ifgridView.IsHandleCreated { //在UI线程上渲染 gridView.InvokeMethodInvokerdelegate { 对于int i=0;i这回答了你的问题吗?这个错误是在Patrick的帮助下解决的,谢谢。谢谢你的帮助,这个解决方案真的很有效。我顺利地得到了数据。但是当套接字断开连接时,等待功能失败,程序再次崩溃。原因可能是什么?代码中是否存在任何未正确处理的异常,例如在正确的位置使用try/catch,这可能是崩溃的原因。我将wait函数移动到try-catch块中,错误消失。谢谢你,帕特里克。很高兴能帮上忙。您可以删除任务,只使用内部whiletrue{}块。但如果它起作用,它就起作用了