所以我一直在尝试创建一些代码,这些代码在while循环上发送数据,特别是通过UdpClient向服务器发送活动数据包.
static void doSend(string ip, int port)
{
while (isSending)
{
_sockMain = new UdpClient(ip, port);
// Code for datagram here, took it out
_sockMain.Send(arr_bData, arr_bData.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我调用"停止"方法时,它会陷入一个恒定的循环并且不会出现.如何将while循环放入线程?所以我可以在停止时中止线程,取消循环?
它会挂起,因为你的doSend方法适用于UI线程.您可以使用类似下面的类来使其在单独的线程上运行,或者您可以使用BackgroundWorkerClass
public class DataSender
{
public DataSender(string ip, int port)
{
IP = ip;
Port = port;
}
private string IP;
private int Port;
System.Threading.Thread sender;
private bool issending = false;
public void StartSending()
{
if (issending)
{
// it is already started sending. throw an exception or do something.
}
issending = true;
sender = new System.Threading.Thread(SendData);
sender.IsBackground = true;
sender.Start();
}
public void StopSending()
{
issending = false;
if (sender.Join(200) == false)
{
sender.Abort();
}
sender = null;
}
private void SendData()
{
System.Net.Sockets.UdpClient _sockMain = new System.Net.Sockets.UdpClient(IP, Port);
while (issending)
{
// Define and assign arr_bData somewhere in class
_sockMain.Send(arr_bData, arr_bData.Length);
}
}
}
Run Code Online (Sandbox Code Playgroud)