c#程式、定時器初步學習

守望陽光01發表於2017-06-20

 

首先是什麼原因讓我做這個小專案的呢,是因為在知乎裡看到的遊俠的文章才嘗試著自己做的,文章地址是:https://www.zhihu.com/question/48811975

開始做的時候我是照著文章的介面去設計的,介面差不多是這樣子:

然後具體說一說我遇到的問題吧,

首先是程式的問題:做這個小工具主要是為了關閉英雄聯盟客戶端,所以首先是怎麼獲取本機正在執行的程式,廢話不多說,直接貼程式碼:

 

public void Process1(object sender, EventArgs e)
        {
            string name = "LeagueClient";
            Process[] process = Process.GetProcesses();
            for (int i = 0; i < process.Length; i++)
            {
                if (process[i].ProcessName == name)
                {
                    process[i].Kill();
                    MessageBox.Show("已經關閉英雄聯盟,請在規定時間內不要開啟");
                }
            }
            if (t.AutoReset == false)
            {
                MessageBox.Show("時間到,現在可以開啟英雄聯盟了,但是要適度玩遊戲哦!");
            }
        }

  

其實網上的例子大把,只需要搜尋process 獲取程式關鍵字就ok,這裡我用的是區域性變數傳程式的名稱

然後是我們要在一段時間內讓程式不斷的被殺,當我們點選button後,在一段時間內,英雄聯盟不能啟動,所以這裡就要用到timer這個控制元件了

在button按鈕裡的程式碼如下:

 public void button1_Click(object sender, EventArgs e)
        {
            
            tt.Start();
            if (textBox1.Text == "")
            {
                MessageBox.Show("請輸入要遮蔽的時間");
            }
            else if (int.Parse(textBox1.Text) < 60)
            {
                MessageBox.Show("時間必須大於60");
            }
            else
            {
                label1.Text = "00";
            label7.Text = "00:00";


            t.Elapsed += new System.Timers.ElapsedEventHandler(Process1);//到達時間自動執行Process1方法
            t.AutoReset = true;//設定執行t.Elapsed += new System.Timers.ElapsedEventHandler(Process1);這個是執行一次(false)還是一直執行(true)
            t.Enabled = true;//啟用elapsed事件(true),關閉elapsed事件(false)


            }


        }

 

  

再然後就是timer1_Tick事件了,在這個方法裡,我開始是栽了很多的跟頭的,首先遇到的問題是給label賦值問題,會報一個程式錯誤,然後這個錯誤有兩種解決方法:

第一種是在這裡加上CheckForIllegalCrossThreadCalls = false;這麼一句,就不會出現上面的問題了,在有一種是比較高深的,我也只是明白了一點點:宣告一個委託,然後invoke:

 

這個的意思就是非同步呼叫,使用委託去執行你需要執行的方法,就是把方法當作一個引數傳遞,其他不多說了,自行百度

這裡我要提醒我自己一下:論全域性宣告和區域性宣告的重要性。要知道這個問題可是耗費了我一個上午的時間。

這裡再說下我們想要做到計時效果的話,就是實時顯示時間,首先是需要設定一下timer的Interval的屬性,單位是毫秒,不管是在程式碼中設定還是在屬性裡設定,這一步是實時顯示時間的關鍵,個人建議設定為1秒重新整理,到了這一步,基本的功能都完善了,再想想好像也沒有了任何遇到的問題。

如果有想自己動手做碰到難題的朋友,歡迎隨時交流切磋。

QQ:511582456  請說明是什麼原因。

 

 

感悟:任何簡單的事情看似簡單,實則對你來說是很難的,如果你不去嘗試動手,也許你永遠也不會做。反之,任何難的事情都是由簡單的事情積累而成的,所以不積跬步無以至千里。

 

相關文章