一个While循环线程

Daa*_*sin 4 c# while-loop

所以我一直在尝试创建一些代码,这些代码在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循环放入线程?所以我可以在停止时中止线程,取消循环?

fof*_*fik 8

它会挂起,因为你的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)