2013-03-11 95 views
1

在這個函數中,我正在檢查遊戲是否運行。如果進程正在運行,我如何讓timer2只運行一次函數?

如果它正在運行,我開始backgroundworker

然後在timer2我繼續檢查過程是否正在運行,直到我退出遊戲。

但我不希望它保持,如果它的運行檢查與否,所有一遍,重新開始backgroundworker ...

所以在一面我想要timer2將運行功能的所有時間直到我退出遊戲爲止,我不希望它始終開始backgroundworker

private void wichProcessIsrun() 
{ 
    Process[] pname = Process.GetProcessesByName("BFBC2Game"); 
    if (pname.Length == 0) 
    { 
     Logger.Write("Battlefield Bad Company 2 Ended"); 
    } 
    else 
    { 
     Logger.Write("Battlefield Bad Company 2 Started"); 
     backgroundWorker1.RunWorkerAsync(); 
    } 
} 

private void timer2_Tick(object sender, EventArgs e) 
{ 
    wichProcessIsrun(); 
} 
+0

我可以檢查背景工作者是否忙碌,但它會一直檢查它,並且如果遊戲結束或開始多次,它會一直寫入日誌文件。我需要一切都要做一次,但也要保持觀看的過程,直到我退出比賽。 – user2065612 2013-03-11 22:04:18

回答

2

你應該有一個bool變量,當您啓動過程後,檢查過程中,只需要檢查它的價值,如果它是true比你不應該開始backgroundworker應該設置。 編輯: 您應該檢查過程是否已經結束之前已經開始。您應該將已啓動的變量放在if子句中,而不是僅在該過程運行一段時間後纔會記錄。

bool started = false; 
    private void wichProcessIsrun() 
    { 
     Process[] pname = Process.GetProcessesByName("BFBC2Game"); 
     if (pname.Length == 0 && started) 
     { 
      Logger.Write("Battlefield Bad Company 2 Ended"); 
      started = false; 
     } 
     else if(pname.Length != 0 && !started) 
     { 
      Logger.Write("Battlefield Bad Company 2 Started"); 
      backgroundWorker1.RunWorkerAsync(); 
      started = true; 
     } 
    } 

    private void timer2_Tick(object sender, EventArgs e) 
    { 
     wichProcessIsrun(); 
    } 
+0

尼古拉這是偉大的另一件事時,即時通訊運行應用程序和遊戲沒有運行,所以它一直在寫入日誌文件,因爲定時器2每秒都在工作,遊戲結束。但是遊戲並沒有結束,因爲它還沒有運行。我如何才能確認遊戲是否結束(退出遊戲時退出)? – user2065612 2013-03-11 22:07:28

+0

現在,它正在檢查遊戲是否不作爲進程運行,因此它會在遊戲結束時一直寫入日誌文件,我需要以某種方式檢查是否我退出遊戲,然後如果進程不在列表中,但是在之前的名單中意味着我退出了比賽。 – user2065612 2013-03-11 22:09:13

+0

謝謝。尼古拉。 – user2065612 2013-03-11 22:09:38