У меня есть приложение, которое использует Google Earth. Я нажимаю кнопку, и появляется новая форма. Эта форма сохраняется, пока пользователь щелкает места на земле Google в основной форме. После появления этой формы цикл запускается, ожидая, что пользователь нажмет «ОК» или «Отменить». В настоящее время я не могу получить никакого взаимодействия с основной формой Google Планета Земля, пока появляется всплывающее окно.Параллельные - потоки? петли?
Я даже не уверен, что это лучший способ приблизиться к нему, поэтому трудно найти что-то важное.
Вот что я пытался до сих пор:
Это первая часть кода после того, как кнопка нажата, что является общим для всего ниже:
Form TotArea = new ASPE.GUI.OptimizationWizard.TotalArea();
DialogResult dr1 = new DialogResult();
Thread t = new Thread(() => dr1 = TotArea.ShowDialog());
t.Start();
//TotArea.TopMost = true;
bool firstcall = true;
dynamic[] polystuff = null;
Просто работает время цикла после диалоговое окно выскакивает (я знал, что это будет ошибкой):
while (dr1 != DialogResult.OK & dr1 != DialogResult.Cancel)
{
//do stuff
}
Использование "Parallel.For":
Parallel.For(0, 1, i =>
{
//do stuff
});
Это не удается, потому что я не знаю, как заставить его ждать, пока я нажму на диалоговые окна.
Использование этого параметра «Параллельное время» http://blogs.msdn.com/b/pfxteam/archive/2009/08/12/9867246.aspx: Параллельные параллельные вычисления = новые ParallelOptions();
Func<bool> condn =() => (dr1 != DialogResult.OK | dr1 != DialogResult.Cancel);
Action whilebody =() =>
{
//do stuff
};
И эти функции:
While(paralleloptions, condn, whilebody);
private static IEnumerable<bool> IterateUntilFalse(Func<bool> condition)
{
while (condition()) yield return true;
}
public static void While(
ParallelOptions parallelOptions, Func<bool> condition, Action body)
{
Parallel.ForEach(IterateUntilFalse(condition), parallelOptions,
ignored => body());
}
И это совершенно чуждо мне, это, кажется, бежит так много так быстро, что это не совсем параллельно на всех.
Может ли кто-нибудь предложить что-нибудь здесь?
Спасибо.
Почему вы вообще работаете в цикле занятости? Когда вы вызываете 'ShowDialog', вы приостанавливаете выполнение этого потока до тех пор, пока' ShowDialog' не вернется (т. Е. Закрыв вторую форму). Если вы хотите, чтобы обе формы были видимыми и интерактивными, просто позвоните 'Show' – Thelonias