C# 窗体退出后关闭线程的代码

重载OnClosing函数       

protected override void OnClosing(CancelEventArgs e)
        {

            // 这里写关闭窗体要执行的代码
            if (myThread != null)
            {
                if (myThread.IsAlive)
                {
                    // Stop the capturing process
                    myThread.Abort();

                    // Close the pcap device
                    device.Close();
                    textBox1.Text = "视频文件获取完成.............";
                }
            }
            base.OnClosing(e);

        }

C#中,如果你想在关闭窗体的同时确保相关的线程也被终止,可以采取以下策略: 1. **使用`Application.Exit`或`Form.Close`事件**:这两种方法都会触发应用程序或窗体退出过程,同时会发送`Shutdown`或`Closing`事件。你可以在这个事件处理器里加入线程清理逻辑。例如: ```csharp private void Form_Closing(object sender, CancelEventArgs e) { // 关闭所有自定义线程 foreach (Thread thread in threadsToStop) { if (!thread.IsAlive) continue; thread.Abort(); // 或者 try/catch并设置 thread.Join(0) 来优雅地等待线程结束 } Application.Exit(); } ``` 2. **自定义`FormClosing`事件**:为窗体创建一个自定义的事件处理程序,当接到关闭请求时,先停止所有线程再执行关闭动作。 3. **线程管理**:对于特定的线程,确保它们有适当的生命周期管理,如使用`BackgroundWorker`或`Task`,它们通常有自己的`CancelAsync`方法来中止任务。 4. **线程池清理**:如果你的线程来自线程池,可以使用`ThreadPool.QueueUserWorkItem`的`CancellationCallback`属性来注册一个方法,当窗体关闭时这个方法会被调用以取消所有正在进行的工作。 5. **异步清理**:如果线程还在执行某个长时间的任务,考虑使用`CancellationTokenSource`来中断任务,并在`FormClosing`事件中传递该令牌给任务。 记得在上述过程中处理可能出现的异常,以防止应用程序崩溃。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值