यह एक तकनीक है जिसे मैंने नेटवर्क डेटा प्राप्त करने के लिए वर्षों से उपयोग किया है और इसे अपने जीयूआई (संवाद, फॉर्म इत्यादि) में उपयोग किया है।थ्रेड से रीयलटाइम गुई अपडेट्स को तेज करना
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
}
}
}
रिसीवर कहीं भी 10 और 100 रीयल-टाइम संदेशों के बीच कहीं और अक्सर लेता है।
मैं हाल ही में नेट 4.0 और सी # में शोध कर रहा हूं और इस डेटा प्रोसेसिंग , जैसे वर्कर थ्रेड, और प्रतिनिधि और आमंत्रण का उपयोग करने के अन्य तरीकों को करने के कई अन्य समान तरीकों को देखा है।
मेरा प्रश्न ... क्या इस डेटा को प्राप्त करने/जीयूआई अपडेट करने के लिए नए .NET पुस्तकालयों (3.5, 4.0 आदि) में एक और अधिक प्रभावी तरीका है?
मुझे लगता है कि यह विधि सी # के साथ-साथ काम नहीं कर रही है।
किसी भी मदद की सराहना की जाएगी।
किसी उपयोगकर्ता पर प्रति सेकेंड एक सौ नोटिफिकेशन फेंकना ज्यादा समझ में नहीं आता है। यह एक धुंध की तरह दिखेगा। अपने UI को पहले प्रयोग करने योग्य बनाएं, आपकी समस्या भी हल करें। Winforms में कोई बदलाव नहीं है। –
अच्छा विचार हंस। यदि मैं थ्रेड में आने वाले डेटा के बारे में मेटा डेटा बनाता हूं और केवल हर दूसरे को गुई अपडेट करता हूं या तो यह डेटा के बारे में एक सभ्य उपयोगकर्ता प्रतिक्रिया देगा, जबकि गुई को अपडेट के साथ उलझने की इजाजत नहीं दी जाएगी। आम तौर पर ऑपरेटर डेटा दर के बारे में एक गाइड के रूप में अद्यतन डेटा आइटम की किसी न किसी गिनती का उपयोग करता है। तो एक नज़र में दस सेकेंड 50 सेकेंड की गिनती इत्यादि। लेकिन मैं मेटा अपडेट के रूप में इसे समेकित कर सकता हूं और सूचीदृश्य में जोड़ सकता हूं। – Sleff