2014-02-27 49 views
0

我想計算C#WPF默認公共部分類的實例數,即Mainwindow類。我嘗試使用靜態變量來獲取計數,但每次調用該類的實例時,靜態變量的計數也會被初始化。 下面是我的代碼: -計數C#WPF窗體應用程序的實例數

public partial class MainWindow : Window 
{ 
    private static int instances; 
    string[] word = { "PRMTCMOU", "POLATP", "RMHTOEBDAOR", "EMSOU", "DEKBYRAO",        "CEOSPSRO", "YREOMM", "LAERWINEA", "TSRMOFCOI", "TROMINO" }; 
    int i = 1; 
    bool checkStrings = false; 
    int score = 0; 
    private Socket tcpsocket; 
    TcpClient tcpClient; 

    public MainWindow() 
    { 
     instances++; 
     InitializeComponent(); 
     this.Loaded += MainWindow_loaded; 
     this.Closed += MainWindow_Closed; 
     this.Closing += MainWindow_Closing; 
    } 
} 
+0

你測試了你的理論嗎? – Gusdor

+0

只有在新的進程環境中,靜態變量纔會是不同的實例,您是否可以從同一進程或新進程多次運行此表單? – ilansch

+0

您無法以您展示的方式解決您的問題。嘗試進程之間的谷歌共享內存,我看到了C#的一些C++包裝,它通過變量完成它。有更多的方法,如從文件,數據庫讀取數據庫,創建一個進程,將承載wcf服務計數這些實例.. – ilansch

回答

0

如果你真的想數不同的實例(可能同時運行),你應該開始,檢查在一個循環中的進程列表,並修改你的計數器線程,以反映當前計數。

例子:

void CheckProcessThread() 
{ 
    while (checkProcesses) 
    { 
     counter = System.Diagnostics.Process.GetProcessesByName("MyProc").Length; 
     Thread.Sleep(1000); 
    } 
} 

請注意,我用的是「checkProcesses」變量,所以你可以在需要時程序退出完全關閉線程。此外,此函數調用佔用了相當多的CPU時間,所以您可能需要增加thread.sleep以減少CPU使用率。

您也可以在定時器(而不是循環線程)上調用此函數。還有其他方法,但基本思想是您需要檢查定期發生的其他進程。