【发布时间】:2013-09-23 13:23:22
【问题描述】:
我有一个主窗体类和另一个类。在第二节课中,我有一个线程循环:
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();
而且,在这个主窗体类中,我也有键挂钩事件。在这种情况下,我想停止在第二类中运行的线程。
private void hook_KeyPressed(int key)
{
if (key == (int)Keys.LMenu)
altPressed = true;
if (key == (int)Keys.F4 && altPressed == true)
udp.StopListening();
}
不幸的是,线程仍在运行。 您对此有什么想法吗?
非常感谢。
【问题讨论】:
-
你有没有调试过你的
while(listening)循环在你调用StopListening来检查状态是否真的改变了? -
你调试过
StopListening是否被执行了吗? -
是的,我试过了,问题是“听”还是真的。
标签: c# multithreading events