Я занимаюсь разработкой приложения для 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!
)
}
}