gpt4 book ai didi

C# 线程在另一个类中启动

转载 作者:行者123 更新时间:2023-12-02 13:26:46 27 4
gpt4 key购买 nike

我有一个主窗体类和另一个类。在第二节课中,我有一个线程循环:

    public void StartListening()
{
listening = true;
listener = new Thread(new ThreadStart(DoListening));
listener.Start();
}


// Listening for udp datagrams thread loop
/*=====================================================*/
private void DoListening()
{
while (listening)
{
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, port);
byte[] content = udpClient.Receive(ref remoteIPEndPoint);

if (content.Length > 0)
{
string message = Encoding.ASCII.GetString(content);
delegMessage(message);
}
}
}

// Stop listening for udp datagrams
/*=====================================================*/
public void StopListening()
{
lock (locker)
{
listening = false;
}
}

在主窗体类中,我在类构造函数中启动此监听

       udp.StartListening();

而且,在这个主窗体类中,我也有关键的 Hook 事件。在这种情况下,我想停止第二个类中运行的线程。

    private void hook_KeyPressed(int key)
{
if (key == (int)Keys.LMenu)
altPressed = true;
if (key == (int)Keys.F4 && altPressed == true)
udp.StopListening();
}

不幸的是,该线程仍在运行。你对此有什么想法吗?

非常感谢。

最佳答案

您的线程在 byte[] content = udpClient.Receive(ref remoteIPEndPoint); 行处阻塞。 Receive 方法将阻塞,直到收到某些内容为止。

您应该使用异步版本 ( BeginReceive )。

关于C# 线程在另一个类中启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18960398/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com