ActiveForm是Null,无法激活它

时间:2015-11-03 20:18:55

标签: c# forms google-maps

我正在开发一个包含两个组件的应用程序:

  1. 在控制台上打印东西的语音识别器;
  2. 带谷歌地图的表格(使用GMap.NET dll)。
  3. 有时,语音识别器会停止,其他时候谷歌地图互动什么都不做。当发生任何这种情况时,唯一的解决方案是重新运行程序。停止似乎是随机的,因为有时我可以在任何一个开始忽略我之前做几个命令。 我发现我需要调用表格作为谷歌地图交互的创建者才能与地图进行交互,但是,有时System.Windows.Forms.Form.ActiveForm会返回null而我无法调用它。我认为这是导致我遇到的所有问题的问题。

    有任何解决方法或提示吗? 非常感谢提前。

      if (System.Windows.Forms.Form.ActiveForm == null)
            {
                Console.WriteLine(Application.OpenForms.ToString());
                //System.Windows.Forms.Form.ActiveForm.Activate();
                Console.WriteLine("Active form is null");
            }
            else if (System.Windows.Forms.Form.ActiveForm.InvokeRequired)
            {
                CallBack d = new CallBack(run);
                System.Windows.Forms.Form.ActiveForm.BeginInvoke(d, new object[] { obj });
            }
    

1 个答案:

答案 0 :(得分:1)

您无需使用ActiveForm与表单进行通信。如果只打开每个表单的一个实例,您可以保持对表单的静态引用,如下所示:

class MyForm
{
    public MyForm
    {
        Current = this;
    }
    public static MyForm Current {get; private set;}
}

现在您可以在任何其他位置使用此表单:

MyForm.Current.DoSomething();

当然,只有在您已经打开MyForm的实例时,这才有效。