sách gpt4 ai đã đi

Làm thế nào để loại bỏ System.Timers.Timer một cách an toàn?

In lại 作者:行者123 更新时间:2023-12-04 04:32:20 30 4
mua khóa gpt4 Nike

当您处理“原始”.net 计时器时,您可以传入等待句柄以在 Win32 计时器被销毁后调用,并且您可以假设您的回调不会被调用。 (并且计时器将被 GC 视为“死”)

如何使用 System.Timers.Timer 执行此操作?

1 Câu trả lời

由于 System.Timers.Timer 和 System.Windows.Forms.Timer 都使用 ThreadPool,它没有操作系统计时器的句柄,因此没有处理的 native 计时器资源 - 只是一个已完成的线程。我不确定您是否可以捕获被 ThreadPool 回收的线程,但我可能是错的。

你可以自己动手(我没有测试过这个,在 Dispose 中使用 ManualResetEvent 可能更有用):

void Run()
{
ManualResetEvent resetEvent = new ManualResetEvent(false);

System.Threading.Timer timer = new System.Threading.Timer(delegate { Console.WriteLine("Tick"); });
timer.Dispose(resetEvent);

MyTimer t = new MyTimer();
t.Interval = 1000;
t.Elapsed += delegate { t.Dispose(resetEvent); };

resetEvent.WaitOne();
}


public class MyTimer : System.Timers.Timer
{
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}

public virtual void Dispose(WaitHandle handle)
{
handle.SafeWaitHandle.Close();
Dispose();
}
}

关于.net - 如何安全地处理 System.Timers.Timer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4277044/

30 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com