【问题标题】:Count number of instances of C# WPF form application计算 C# WPF 表单应用程序的实例数
【发布时间】:2014-02-28 13:56:44
【问题描述】:

我正在尝试计算 C# WPF 默认公共部分类的实例数,即 Mainwindow 类。我尝试使用静态变量来获取计数,但是每次调用类的实例时也会初始化静态变量的计数。 下面是我的代码:-

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; 
    }
}

【问题讨论】:

  • 你的理论测试了吗?
  • 静态变量只有在新的进程环境中才会是不同的实例,你是从同一个进程中多次运行这个表单,还是从新进程中运行?
  • 您无法以您所展示的方式解决您的问题。尝试谷歌进程之间的共享内存,我看到了一些 C# 的 C++ 包装器,它们通过变量来完成它。还有更多的方法,比如从文件读取,db,创建一个进程来托管 wcf 服务来计算这些实例..

标签: c# wpf


【解决方案1】:

如果您真的想计算单独的实例(可能是同时运行的),您应该启动一个线程,在循环中检查进程列表并修改您的计数器以反映当前计数。

例子:

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

请注意,我使用“checkProcesses”变量,因此您可以在希望程序退出时干净地关闭线程。此外,这个函数调用会占用相当多的 cpu 时间,因此您可能需要增加 thread.sleep 以降低 CPU 使用率。

您也可以在计时器(而不是循环线程)上调用此函数。还有其他方法,但基本思想是您需要检查定期发生的其他过程。

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多