【发布时间】:2014-06-11 09:47:31
【问题描述】:
我在 Ubuntu 上使用 Mono/GKT#/C# 从飞行模拟器接收 UDP 字符串。该字符串由引导输入组成,例如油门设置,摇杆位置等...
我需要做的是在我的应用程序的不同文本框中(条目:s)显示飞行员输入。
我在异步模式下使用 UDPClient,模拟器以 120Hz 的频率进行流式传输。显示数据一开始可以正常工作,但是长时间在操纵杆上进行许多突然移动会导致应用程序崩溃并显示错误消息 SIGSEGV。但是,如果我在控制台应用程序中做同样的事情,一切正常。此外,如果我选择不在输入框中显示数据,它也不会崩溃。看来这是 GTK# 的内存泄漏问题。
我是否需要处理条目对象,如果需要,应该如何实现?或者条目是否有需要不时清除的缓冲区?还是我在这里缺少其他东西?
一些简化的代码段:
public UdpClient client = new UdpClient(listenPort);
和
try
{
client.BeginReceive(new AsyncCallback(receiver), null);
} catch (Exception e)
{
}
和
private void receiver(IAsyncResult res)
{
IPEndPoint myIpEndPoint = new IPEndPoint(IPAddress.Any, listenPort);
byte[] received = client.EndReceive(res, ref myIpEndPoint);
string dataString = Encoding.UTF8.GetString(received);
string[] dataArray = dataString.Split(',');
entryThrottlePosition.Text=dataArray[4]; //The position in array with throttle position
client.BeginReceive(new AsyncCallback(receiver), null);
}
欢迎所有建议!
【问题讨论】:
-
如果是崩溃,向我们显示堆栈跟踪。