2015-11-03 73 views
0

我发展与2个组件的应用程序:的ActiveForm是空,无法激活它

  1. ,打印在控制台上的东西的语音识别器;
  2. 谷歌地图(与GMap.NET DLL)的窗体。

有时候,语音识别器只是停下来,其他时候谷歌地图的互动什么都不做。当发生这种情况时,唯一的解决方案是重新运行程序。停止似乎是随机的,因为有时我可以做任何命令之前,它的任何开始忽略我。 我发现我需要调用表单作为Google地图交互的创建者才能与地图交互,但是,有时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 }); 
     } 
+2

请输入一些代码 –

+0

编辑添加部分代码。即使语音识别器正在工作(并且打印内容),当“映射无法响应”时,“主动格式为空” –

回答

1

您不需要使用ActiveForm与表单进行通信。如果每个窗体只有一个实例将被打开,你可以保持一个静态的参考形式是这样的:

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

现在你可以使用这种形式的任何其他位置是这样的:

MyForm.Current.DoSomething(); 

当然,这只会在你已经打开MyForm的实例时才起作用。

相关问题