gpt4 book ai didi

c# - 线程循环,以最佳方式关闭它

转载 作者:太空宇宙 更新时间:2023-11-03 11:00:02 24 4
gpt4 key购买 nike

好的,这是代码:

    private void Receivev2()
{
try
{
using (UdpClient udpclient = new UdpClient(1500))
{
while (connect == true)
{

byte[] byteData = udpclient.Receive(ref remoteEP);
waveProvider.AddSamples(byteData, 0, byteData.Length);
if (Record == true)
{
waveWriter.Write(byteData, 0, byteData.Length);
}

}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "VoiceChat-Receive ()", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

它在一个线程上,嗯,它从 udp 接收数据并播放它,没什么奇怪的。

然而,我的问题是让它正常停止,或者好吧,不知道怎么说。

但是假设,我启动线程并循环。然后,如果我关闭我的应用程序,应用程序将不会“关闭”,因为线程不会关闭。

现在要解决这个问题,我使用 IsBackground = true。

但我不确定这是否是最佳方式,感觉它只会强制它关闭,例如 ProcessKill 或其他东西。

也许这是正确的方法,我不知道。

请给我一些建议。

最佳答案

诀窍是调用 UdpClient.Close。这将取消任何挂起的操作,并“戳” Receive 方法抛出 SocketException(如果它处于阻塞状态)。显然,您必须从另一个线程调用 Close,这意味着您需要稍微重构您的代码,以便 udpclient 不再是局部变量。您还需要将 connect 设置为 false 以便循环结束。

所以总结一下步骤如下。

  • 调用Close 以防止Receive 阻塞。
  • connect 设置为 false。
  • 重构您的代码以实现上述目标。

关于c# - 线程循环,以最佳方式关闭它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18049972/

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