sách gpt4 ai đã đi

Tại sao Dịch vụ Windows của tôi không hoạt động bình thường với System.Timers.Timer hoặc System.Windows.Forms.Timer

In lại 作者:行者123 更新时间:2023-12-04 11:28:43 26 4
mua khóa gpt4 Nike

我最近遇到了编写 Windows 服务的挑战。我需要定期请求一个 URL 并检查它的可用性。为此,我决定在 OnStart 中初始化一个计时器。服务方法并在 timer_Tick 中完成所有工作事件。

我的第一种方法是使用 System.Windows.Forms.Timer及其Tick事件。我选择了它,因为我正在阅读教程。不知何故,我无法使服务工作。它安装并启动没有问题,但它不会触发事件(我将调试器附加到进程并看到它没有被触发)。我想也许在 Windows 服务中使用 Forms 计时器不是一个好主意,所以我决定切换到 Hệ thống.Bộ đếm thời gian.Bộ đếm thời gian并利用其Elapsed事件。这也不起作用。我在 Windows 窗体应用程序中尝试了这两种方法,它们都有效。

经过一番挖掘,我找到了这个网站:http://weblogs.asp.net/sibrahim/archive/2004/01/13/58429.aspx博主建议使用另一个计时器:Hệ thống.Threading.Timer .我第三次改变了方法,BOOM 开始像魅力一样工作。

我的问题是:为什么我不能在 Windows 服务中使用其他计时器,为什么很难找到有关它的信息?

1 Câu trả lời

System.Windows.Forms.Timer timer 使用 UI 的消息泵来编码滴答事件,默认情况下服务不会运行消息泵,因此无需额外工作即可 System.Windows.Forms.Timer计时器将不起作用。
Hệ thống.Bộ đếm thời gian.Bộ đếm thời gian是一个基于服务器的计时器,并在您创建它的线程上引发一个事件(我认为)。如果这不起作用,则可能您没有启动计时器,或者计时器在立即结束的线程上运行(例如,没有任何东西使线程保持事件状态,因此它完成了)。

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx
Hệ thống.Threading.Timer timer 使用在 ThreadPool 上运行的回调。线程并且根本不依赖于消息泵,因此这有效。

当你运行 Application.Run(myForm)在 WinForms 项目中,该调用还启动了消息泵,它管理 UI 消息。您提到的 windows 计时器是一个 UI 组件,并期望消息泵正在运行,以导致在 UI 线程上发生滴答事件。

查看此处以在 Windows 服务中运行消息泵:

Message pump in .NET Windows service

进一步阅读:

http://support.microsoft.com/kb/842793

总之,我会选择 Hệ thống.Threading.Timer类(class)。

关于.net - 为什么 Windows 服务不能与 System.Timers.Timer 或 System.Windows.Forms.Timer 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9208378/

26 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