在NET CF上实现InputBox

时间:2011-07-28 19:47:29

标签: c# multithreading compact-framework inputbox

我正在为Windows Mobile开发一款应用。它包含一个主窗体,用户UI通过单独的UserControl实现。当用户点击Menu> Ship Product,ShipProduct UserControl被添加到主窗体Controls数组中并显示。一旦用户在ShipProduct UC上,我想为他们提供InputBox功能。这是我尝试过的(伪)。除了将InputBox添加到主窗体的委托外,永远不会返回。我假设这是因为are.WaitOne()与UI在同一个线程上。

我需要做些什么才能实现这个目标?

我找到了一个使用YieldAwait库(http://yieldawait.codeplex.com)的工作,但结果却是一个非常复杂的解决方案。

<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!
     )
  }

}
</pre>

0 个答案:

没有答案