1

Windows Mobile 用のアプリを開発しています。これには 1 つのメイン フォームが含まれ、ユーザー UI は個々の UserControls で実装されます。ユーザーが [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>
4

0 に答える 0