2015-11-03 2 views
0

Я занимаюсь разработкой приложений с 2-х компонентов:ActiveForm является Null, не может активировать его

  1. распознаватель речи, которая печатает вещи на консоли;
  2. Форма с картами google (с платой GMap.NET).

Иногда речевой распознаватель просто останавливается, а другие взаимодействия с Google Maps ничего не делают. Когда это происходит, единственным решением является перезапуск программы. Остановка кажется случайной, поскольку иногда я могу сделать несколько команд, прежде чем кто-либо из них начнет игнорировать меня. Я обнаружил, что мне нужно вызвать форму как создателя взаимодействия с картами 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

Отредактировано для добавления части кода. То, что «Активная форма имеет значение null», происходит, когда карта не отвечает, даже несмотря на то, что распознаватель речи работает (и печатает материал) –

ответ

1

Вам не нужно использовать ActiveForm для связи с вашей формой. В случае, если будет открыт только один экземпляр каждой формы, вы можете сохранить статическую ссылку на форму, как это:

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

Теперь вы можете использовать эту форму любое другое место, как это:

MyForm.Current.DoSomething(); 

Конечно, это будет работать, только если вы уже открыли экземпляр MyForm.

Смежные вопросы