C#app无法超越初始化

时间:2016-06-07 14:32:43

标签: c# winforms

Program.cs的

namespace PerformanceMonitor
{
    static class Program
    {
        private static int NumberOfCores;
        private static List<int> CPULoadVals;

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MonitorGUI());

            NumberOfCores = getNumberOfCores();
            CPULoadVals = getCoreLoadVals();
        }

        private static int getNumberOfCores()
        {
            int coreCount = 0;
            foreach (var core in new ManagementObjectSearcher("SELECT * FROM Win32_Processor").Get())
            {
                coreCount += int.Parse(core["NumberOfCores"].ToString());
            }
            return coreCount;
        }
        ...

MonitorGUI.cs

namespace PerformanceMonitor
{
    public partial class MonitorGUI : Form
    {
        public static List<Label> labels;
        private static List<int> CPULoadVals;

        public MonitorGUI()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            ...
        }

调试应用程序我可以看到调用InitializeComponent()导致创建一个新表单(Application.Run(new MonitorGUI());)但是在此之后尝试单步执行并且不调用任何内容。即使我可以直观地看到它已加载

,也不会调用表单加载方法

1 个答案:

答案 0 :(得分:1)

Application.Run()

  

开始在当前线程上运行标准的应用程序消息循环,并使指定的表单可见。

此方法阻止,仅在关闭作为参数传递的Form时返回。因此,当您关闭主窗口时,将执行此后的所有调用。

您可能想要更改顺序:

 [STAThread]
 static void Main()
 {
     NumberOfCores = getNumberOfCores();
     CPULoadVals = getCoreLoadVals();

     Application.EnableVisualStyles();
     Application.SetCompatibleTextRenderingDefault(false);
     Application.Run(new MonitorGUI());
 }

只有在您订阅Form1_Load()的{​​{1}}事件时才会调用Load

Form

但这也可以在设计师中完成。检查您是否正确设置了此事件。