- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我最近遇到了编写 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.aspxHệ 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/
Tôi đang sử dụng bộ đếm thời gian để chạy một sự kiện theo định kỳ ở những khoảng thời gian khá dài (2 phút). Mọi thứ đều hoạt động tốt. Tuy nhiên, tôi muốn sự kiện được kích hoạt ngay khi bộ đếm thời gian được tạo (thay vì phải đợi 2 phút). Lưu ý rằng tôi không thể thực hiện điều này chỉ bằng cách gọi một phương thức, vì nó mất một thời gian để chạy và
Tôi đang kiểm tra một số mã cũ khủng khiếp có chứa các sự kiện Timer và một số mã dài chứa các lệnh gọi DoEvents. Phiên bản đơn giản hơn như sau: Private Sub tmrProcess_Timer()
Tôi đang cố gắng tạo một ứng dụng Windows Forms và muốn triển khai bộ đếm thời gian. public void timerStart() { DateTime bây giờ = DateTime
Tôi đang tạo một lớp mới để làm cho lớp System.Timers.Timer phù hợp hơn với nhu cầu của tôi. Tôi tạo lớp mới của mình như thế này... sử dụng System.Timers; class BtElapsedEv
Gần đây tôi đã kiểm tra một số bộ hẹn giờ khả thi và System.Threading.Timer và System.Timers.Timer có vẻ cần thiết với tôi (vì chúng hỗ trợ nhóm luồng). Tôi đang tạo một trò chơi và tôi dự định sử dụng
Trước tiên tôi xin nói rằng đây không hẳn là vấn đề mà là vấn đề cần giải quyết. Bây giờ tôi đã có giải pháp và mọi thứ đều ổn với tôi. Nhưng tôi muốn biết tại sao lần đầu tiên lại gặp vấn đề. Đây là mã tôi có hiện tại và nó hoạt động đúng như tôi mong đợi:
Trong bài viết này: http://msdn.microsoft.com/en-us/magazine/cc164015.aspx tác giả nêu rằng System.Threading.Timer không an toàn với luồng. Kể từ đó
Bối cảnh: Tôi có một bộ đếm thời gian dùng để theo dõi thời gian đã trôi qua kể từ khi sự kiện serialPort DataReceived được kích hoạt. Tôi đang tạo giải pháp riêng cho việc này thay vì sử dụng sự kiện hết thời gian tích hợp vì tôi đang nhận được luồng dữ liệu liên tục
Tôi đang xem mã Flutter Timer và phương thức cancel(). Khi tôi muốn xóa một bộ đếm thời gian, tôi có thể sử dụng hai dòng sau: timer.cancel(); timer = null; hoặc tôi có thể làm như sau: timer
Tôi đang cố gắng sử dụng bộ đếm thời gian trong C# để chạy một phương thức ở khoảng thời gian năm giây. Tuy nhiên, mã này có vẻ không hoạt động. Tôi không gặp lỗi nào khi chạy nó, nhưng chương trình (tôi đang chạy trong bảng điều khiển) đóng ngay sau IP.timer1.Start(). Tim
Tôi đang cố gắng sử dụng bộ đếm thời gian trong C# để chạy một phương thức ở khoảng thời gian năm giây. Tuy nhiên, mã này có vẻ không hoạt động. Tôi không gặp lỗi nào khi chạy nó, nhưng chương trình (tôi đang chạy trong bảng điều khiển) đóng ngay sau IP.timer1.Start(). Tim
Tôi gặp lỗi: 'Timer' là tham chiếu không rõ ràng giữa 'System.Windows.Forms.Timer' và 'System.Threading'
Trong ứng dụng của mình, tôi phải gửi thông tin nhịp tim định kỳ đến một ứng dụng "anh chị em". Sử dụng System.Timers.Timer/Threading.Timer hoặc sử dụng một luồng với vòng lặp while và Thread.Sleep
Gần đây tôi phải đối mặt với thử thách viết Dịch vụ Windows. Tôi cần yêu cầu URL theo định kỳ và kiểm tra tính khả dụng của nó. Để thực hiện điều này, tôi quyết định khởi tạo bộ đếm thời gian trong OnStart. Phương thức dịch vụ và thực hiện tất cả công việc trong sự kiện timer_Tick.
Có vẻ như các phiên bản System.Timers.Timer duy trì trạng thái sự kiện thông qua một số cơ chế, nhưng các phiên bản System.Threading.Timer thì không. Chương trình mẫu với System.Threading.Time tuần hoàn
Tôi đã tạo một đối tượng goog.Timer (http://closure-library.googlecode.com/svn/docs/class_goog_Timer.html) với lệnh go mới
Khi bạn đang xử lý bộ đếm thời gian .net "thô", bạn có thể truyền vào một xử lý chờ để được gọi sau khi bộ đếm thời gian Win32 bị hủy và bạn có thể cho rằng lệnh gọi lại của bạn sẽ không được gọi. (và bộ đếm thời gian sẽ được coi là "chết" bởi GC) Cách sử dụng System.Timer
Tôi muốn gợi ý tự động hoàn thành deoplete bật lên nhanh hơn, điều này đòi hỏi phải thiết lập g:deoplete#auto_complete_delay. Trợ giúp cho biết điều này đòi hỏi hỗ trợ +timers. Làm thế nào tôi có thể kích hoạt bộ hẹn giờ này trong cấu hình? Cảm ơn!
Tôi đang tự hỏi liệu có cách hợp lý nào để xác định khả năng tải của đối tượng Timers.Timer không? Hay chính xác hơn là chức năng của luồng. Có ai biết có vấn đề gì khi khởi động một số lượng lớn (hàng trăm) luồng bằng lớp Timer không? EDIT: Để làm việc, chúng ta sẽ bắt đầu một số
Tôi đang tạo một WindowsService với một Timer được liên kết với một EventHandler có vòng lặp vô hạn; Tôi muốn có thể kích hoạt timer này một lần trong phương thức OnStart() của dịch vụ, sau đó
Tôi là một lập trình viên xuất sắc, rất giỏi!