我正在使用 c# 練習網路,到目前為止一切都很好,我遇到了客戶端/服務應用程式的情況,我試圖發送和接收訊息并將訊息添加到服務器應用程式的串列框中。但是從客戶端發送訊息后,它向我顯示一個錯誤(跨執行緒操作無效)并且我無法將訊息從另一個執行緒添加到串列中這是代碼:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Thread serverListen = new Thread(bufferHandlerThread);
serverListen.Start();
}
private void bufferHandlerThread()
{
UdpClient server = new UdpClient(6661);
while (true)
{
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] buffer = server.Receive(ref RemoteIpEndPoint);
string receivedData = Encoding.UTF8.GetString(buffer);
string toAdd = RemoteIpEndPoint.Address.ToString() " <-> " receivedData;
dataList.Items.Add(toAdd); // Here the exception.
}
}
}
謝謝 :)
uj5u.com熱心網友回復:
替換這個:
dataList.Items.Add(toAdd);
和:
Invoke(new Action(() =>
{
dataList.Items.Add(toAdd);
}));
uj5u.com熱心網友回復:
您可以使用以下方法。
public static void AddListItemThreadSafe<TControl>(this TControl @this, Action action) where TControl : ListBox
{
if (@this.InvokeRequired)
{
@this.Invoke((MethodInvoker)delegate
{
dataList.Items.Add(toAdd);
action();
});
}
else
{
action();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/349079.html
上一篇:Java執行緒安全問題
