這加快實時更新桂是我已經使用多年接收網絡數據,並在我的GUI使用它(對話,形成等)的技術。從一個線程
public delegate void mydelegate(Byte[] message);
public ReceiveEngineCS(String LocalIpIn, String ReceiveFromIp, mydelegate d)
{
this.m_LocalIpIn = LocalIpIn;
this.m_ReceiveFromIp = ReceiveFromIp;
m_MainCallback = d;
SetupReceive();
m_Running = true;
//Create the Track receive thread and pass the parent (this)
m_RtdirReceiveThread = new Thread(new ParameterizedThreadStart(MessageRecieveThread));
m_RtdirReceiveThread.Start(this);
}
private void MessageRecieveThread(System.Object obj)
{
ReceiveEngineCS parent = (ReceiveEngineCS)obj;
while(parent.m_Running)
{
Byte[] receiveBytes = new Byte[1500];
try
{
receiveBytes = parent.m_ClientReceiver.Receive(ref parent.ipEndPoint);
parent.ThreadOutput(receiveBytes);
}
catch (Exception e)
{
parent.StatusUpdate(e.ToString());
}
}
}
public void ThreadOutput(Byte[] message)
{
m_MainCallback(message);
}
public partial class SystemMain : Form
{
//Local Class Variables
Network.ReceiveEngineCS SystemMessageReceiver;
private void Form1_Load(object sender, EventArgs e)
{
//Load up the message receiver
SystemMessageReceiver = new Network.ReceiveEngineCS(localAddy, fromAddy, new mydelegate(LocalDelegate));
}
public void LocalDelegate(Byte[] message)
{
if (Form.ListView.InvokeRequired)
{
//External call: invoke delegate
Form.ListView.Invoke(new mydelegate(this.LocalDelegate), message);
}
else
{
//Get the Packet Header
Formats.PacketHeaderObject ph = new Formats.PacketHeaderObject(message);
//Update or Add item to Specific ListView
... update views
}
}
}
Receiver每秒接收10到100個實時消息,並且通常更多。
我一直在做研究最近到.NET 4.0和C#,發現許多其他類似的方式來做到這一點的數據處理 ,比如工作線程,並使用代表和調用的其他方式。
我的問題...有沒有在新的.NET庫(3.5,4.0等)更有效的方式這個數據接收/ GUI更新呢?
我覺得這個方法不使用C#的工作,以及。
任何幫助,將不勝感激。
每秒向用戶投擲100個通知沒有多大意義。它看起來像模糊。先讓你的UI可用,也解決你的問題。 Winforms沒有變化。 – 2011-04-25 00:18:48
好主意漢斯。如果我在線程中構建關於傳入數據的元數據,並且每秒鐘只更新gui,那麼它仍然會給予用戶有關數據的體面迴應,同時允許Gui不會因更新而停滯不前。通常操作員使用更新數據項的粗略計數作爲數據速率的指導。因此,一眼就可以計算出十秒一秒50等等。但我可以將它作爲元更新並將其添加到列表視圖中。 – Sleff 2011-04-25 02:53:47