[英]C# Windows Service, Timer won't tick
我一直在這里試圖找到一個已解決的問題來幫助我解決我的問題。 不幸的是,我不太了解C#和Forms / Services能夠解釋許多答案,所以我想我會在這里發布我的問題,它的唯一性,看看我是否能得到足夠的答案。
我最近在當地公司實習,學習C#和SQL來管理他們的運輸/庫存物流。
我已經非常擅長使用VisualStudios2017創建Windows窗體,而且我對Java的了解可以幫助我快速地獲取C#。
但是,最近我被賦予了開發Windows服務的任務,該服務將在后台運行,並且每分鍾都會執行一些重復性任務。
由於我熟悉向Windows窗體添加功能的“拖放”技術,我的主管建議我在我的服務中使用Timer,所以,這就是我所做的,我做了一個“拖放”來添加定時器組件我的服務,並將其重命名為“timerMainTick”
這是我的代碼。 我想從簡單開始,所有這些代碼都移動到一些本地目錄(以下稱為$ DIR),創建一個文件夾$ DIR / GabbServiceDir,並創建一個文本文件$ DIR / GabbServiceDir / AnotherTest.txt“。但是,每次計時器滴答時,它應該創建(如果它還不存在)一個新的文本文檔“$ DIR / GabbServiceDir / Test.txt”並且每2.5秒附加一次日期時間。這不會發生。
namespace GabbService
{
public partial class GabbService : ServiceBase
{
public string dir = "../../Users/Tyler/GabbServiceDir";
public GabbService()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
Directory.CreateDirectory(dir);
timerMainTick.Interval = 2500; //miliseconds = 2.5seconds
File.AppendAllText(dir + "/AnotherTest.txt","asdiofbhjasdflikjbasdf\r\n");
timerMainTick.Enabled = true;
timerMainTick.Start();
}
protected override void OnStop()
{
}
private void timerMainTick_Tick(object sender, EventArgs e)
{
timerMainTick.Enabled = false;
File.AppendAllText(dir + "/Test.txt", DateTime.Now.ToString() + "\r\n");
timerMainTick.Enabled = true;
}
}
}
並且在服務啟動后顯示目錄及其內容的圖片。
這是在Powershell中的$ DIR / GabbServiceDir中
PS C:\Users\Tyler\GabbServiceDir> ls
Directory: C:\Users\Tyler\GabbServiceDir
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 6/23/2017 9:54 PM 72 AnotherTest.txt
PS C:\Users\Tyler\GabbServiceDir> cat .\AnotherTest.txt
asdiofbhjasdflikjbasdf
timerMainTick是Windows.Forms.Timer,並且提供的許多解決方案都指示使用不同類型的計時器System.Timers.Timer。
這一切都很好,並且可以解決我的問題,但是當這種新類型的計時器滴答作響時嘗試做某事時會出現問題。 當我在服務設計器中雙擊Windows.Forms.Timer時,它會自動編寫一堆源代碼,並為我提供一種開始編寫代碼的方法,當計時器滴答時,它會神奇地執行。 我還不熟悉背景中發生的所有魔法,因為在我實習的那天,我才開始學習C#。 我不知道如何命名自定義對象的方法,以便“背景魔法”可以工作,因此我無法與我的類似問題提供一些解決方案。
也許有人可以啟發我。
例如。 假設我進入Designer源代碼,並添加一個組件
private System.Timer.Timer timerSystemTimer;
然后,在服務源代碼中並更改以前的方法
private void timerMainTick_Tick(object sender, EventArgs e)
至
private void timerSystemTimer_Tick(object sender, EventArgs e)
我立即收到錯誤:
我做的閱讀越多,我看到越多的事件處理程序被傳遞,我還沒有理解他們做了什么。 也許我需要的是一些好文學的鏈接。 我有能力獨自尋找這個,但我想這里的很多人可能會鏈接到其他一些好的文獻,這些文獻更具體到我想要理解的內容。
*到目前為止我發現的東西可能對我的情況有用: https : //msdn.microsoft.com/en-us/library/aa288459(v = vs.71).aspx
VS中的錯誤 - 您添加了timerSystemTimer
但沒有刪除仍然引用timerMainTick_Tick
作為其Tick
事件處理程序的timerMainTick
組件。 由於您將其更改為timerSystemTimer_Tick
因此編譯器不再找到此處理程序方法。
添加不同的計時器 - 從不修改設計器文件代碼 您可以將System.Timers.Timer實例添加到類代碼中,在OnStart
實例化它並為Elapsed
事件提供處理程序。 這是給你的樣品 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.