C# 转换Udp流数据并同时写入rTextBox的有效方法

C# 转换Udp流数据并同时写入rTextBox的有效方法,c#,.net,winforms,udp,C#,.net,Winforms,Udp,我正在设计一个终端程序,显示一些通信协议的传输数据。数据通过UDP(或TCP)传输到PC表单应用程序,并将其写入richTextBox。我以byte[]格式获取UDP数据,并将其转换为字符串以显示在文本框中。但是,对于流式应用程序,转换速度太慢。还有其他快速解决方案吗 private void Receive(IAsyncResult ar) { IPEndPoint ip = new IPEndPoint(ipadress, port); byte[] bytes = udp.EndRe

我正在设计一个终端程序,显示一些通信协议的传输数据。数据通过UDP(或TCP)传输到PC表单应用程序,并将其写入richTextBox。我以byte[]格式获取UDP数据,并将其转换为字符串以显示在文本框中。但是,对于流式应用程序,转换速度太慢。还有其他快速解决方案吗

private void Receive(IAsyncResult ar) 
{

IPEndPoint ip = new IPEndPoint(ipadress, port);

byte[] bytes = udp.EndReceive(ar, ref ip); // Get actual data 
if (binary format) // Convert to bytes to binary for textbox
{
//This conversion is slow 
   string data = string.Join( " ",
    bytes.Reverse().Select( x => Convert.ToString( x, 2 ).PadLeft( 8, '0' ) )
   this.Invoke(new(MethodInvoker(delegate
   {
      textDisplay.Text += "\nReceived Data: " + data;
   }));
 );
else if (ascii format) // Convert to bytes to ascii 
{
   string data = Encoding.ASCII.GetString(bytes);
   this.Invoke(new(MethodInvoker(delegate
   {
      textDisplay.Text += "\nReceived Data: " + data;
   }));
}
UdpReceive(); // Calls itself again from one upper method
}
...further formats can be added...

字节到二进制字符串的转换对我来说有点奇怪,因为我有字节格式的实际二进制数据,它是8位的,但是如果不进行转换,我就无法得到它。

。。这个条件检查是什么:
if(二进制格式)
?另外,对你来说,
太慢
意味着什么,因为它是任意的,除非你澄清一个问题或你的期望。综上所述,代码评审的优化工作通常不适合这个社区(通常是一个开放式问题,没有明确的答案,这将是主观的,并且会被过度分析)。所以,建议您在堆栈交换社区(SE)中提出这个问题。if(二进制格式)表示单选按钮状态。我有3个单选按钮,1->BIN,2->DEC,3->HEX。如果radioButtonBin.Checked=true,则执行该代码,依此类推。。。我的意思是有一个字节数组格式的数据,包括8位数组。所以我已经有8位了,我应该把它转换成字符串显示在文本框中。我认为这些转换速度很慢。。当然,您可以使用
BitConverter
,并且您可能只需要使用一个事件,而不是这个MethodInvoker方法。但是,我们在这里讨论的是什么样的数据,这个方法调用的频率有多高,并为我们提供了一个缓慢概念的概念和度量(需要多少毫秒\秒?)。添加一些并运行一些诊断。。虽然我使用了模拟数据和console.out.write,但该转换少于该函数执行时间的0.14%,循环1000次。这绝对不是你感觉速度慢的原因,因为它用了不到29毫秒。