所以我有一個使用Google地球的應用程序。我點擊一個按鈕,彈出一個新窗體。當用戶點擊主表單中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
});
這失敗了,因爲我不知道如何讓它等待我點擊對話框。
使用此「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 2013-05-03 12:04:29