Реализация InputBox на NET CF - PullRequest
1 голос
/ 28 июля 2011

Я занимаюсь разработкой приложения для Windows Mobile. Он содержит одну основную форму, а пользовательский интерфейс реализован с индивидуальными элементами управления пользователя. Когда пользователь нажимает на Menu> Ship Product, UserControl ShipProduct добавляется в основной массив Controls форм и отображается. Как только пользователь входит в UC ShipProduct, я хотел бы предоставить ему функциональность InputBox. Вот что я попробовал (псевдо). За исключением делегата, который добавляет InputBox в основную форму, никогда не возвращается. Я предполагаю, что это потому, что are.WaitOne () находится в том же потоке, что и пользовательский интерфейс.

Что мне нужно сделать, чтобы это реализовать?

Я нашел обходной путь использования библиотеки YieldAwait (http://yieldawait.codeplex.com),, но оказалось, что это очень сложное решение.

<code><pre>
Main()
{
   MainForm form = new MainForm();
   Application.Run(form);
}

MainForm: Form
{
   public AutoResetEvent are = new AutoResetEvent(false);

   Menu_click()
   {
      this.Controls.Add(new ShipProduct)
   }
}

InputBox: UserControl
{
    OK_Button_click()
    {
       form.are.Set();

    }

}

ShipProduct: UserControl
{


  void GetUserInput()
  {


     Thread t = new Thread(ShowInputBox);
     t.Start();
     form.are.WaitOne();

  }

  void ShowInputBox()
  {
     InputBox ib = new InputBox();
     form.Invoke
     (
       delegate {
                  form.Controls.Add(ib);
                  ib.Show();
                } 
       /***/
       // delegate never returns!
     )
  }

}
...