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 루프 후 실행 대화 상자가 (난이 실패 할 줄 알았) 팝업 :
while (dr1 != DialogResult.OK & dr1 != DialogResult.Cancel)
{
//do stuff
}
는 "Parallel.For를"사용 :
Parallel.For(0, 1, i =>
{
//do stuff
});
대화 상자를 클릭 할 때까지 기다리는 방법을 모르므로 실패합니다.
"Parallel While"사용 http://blogs.msdn.com/b/pfxteam/archive/2009/08/12/9867246.aspx : ParallelOptions paralleloptions = new 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