我在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);
}
欢迎所有建议!
答案 0 :(得分:0)
强制更新主线程上的条目解决了问题。
Application.Invoke( delegate{
//Code
entryThrottlePosition.Text=dataArray[4];
});