作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个主窗体类和另一个类。在第二节课中,我有一个线程循环:
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/
我是一名优秀的程序员,十分优秀!