[英]c# is there a way to stop a foreach loop until the event occurs again?
[英]C# - Loop foreach until true
C#的新手。 但由於工作環境,我必須“隨時學習”。
過去兩天我的代碼一直在苦苦掙扎,我在這里消耗了盡可能多的問題和MSDN上的文章,但我認為他們讓我更加困惑。
我使用我的代碼啟動應用程序A. 應用程序A啟動應用程序B(我無法啟動應用程序B,我超越了它)。
我想用我的代碼做的是當應用程序B的MainWindowTitle
可用時,隱藏窗口。
到目前為止,我只能用Thread.Sleep(xxx)
完成這個; 在你看到下面的代碼之前。 我想避免使用計時器。
我想要做的是循環下面的代碼,直到它是真的。
當應用A啟動應用B時,MainWindowTitle可用幾秒鍾。 但是代碼運行得如此之快,以至於它還沒有完成,代碼就完成了。
IntPtr hWnd = IntPtr.Zero;
foreach (Process procList in Process.GetProcess())
{
if (procList.MainWindowTitle.Contains("SAP Logon"))
{
hWnd = procList.MainWindowHandle;
}
}
ShowWindow(hWnd, 0);
該代碼僅在我之前使用以下內容時才有效:
Thread.Sleep(10000);
在整個代碼塊之前。 它工作的唯一原因是b / c它允許有足夠的時間傳遞窗口打開並包含我正在尋找的標題。
我試過while循環。
- 在'foreach'之外
- 'if'之外
- 在'foreach'周圍(這很快就鎖定了系統......)哈!
- 圍繞'如果'
我覺得以下其中一個應該可行,但它沒有,或者我完全搞砸了。
while (!procList.MainWindowTitle.Contains("SAP Logon")) { } // ! at the beginning OR
while (procList.MainWindowTitle.Contains("SAP Logon") == null) { } // equaling null OR
while (procList.MainWindowTitle.Contains("SAP Logon") < 0) { } // etc., etc.,
while (procList.MainWindowTitle.DOESNOTContain("SAP Logon")) { } // I know this is wrong but it almost seems like what I need...
有人有什么建議嗎? 我的大腦是炒雞蛋,這是我完成這個應用程序所需的最后一點。 如果我唯一的選擇是IS Thread.Sleep()
,那就這樣吧,但我寧願不使用它。 最后一件事:我必須以.net 2.0為目標。
非常感謝你!
您使用while循環的想法應該有效。 你可以嘗試這樣的事情:
IntPtr hWnd = IntPtr.Zero;
bool isFound = false;
while(!isFound)
{
foreach (Process procList in Process.GetProcess())
{
if (procList.MainWindowTitle.Contains("SAP Logon"))
{
isFound = true;
hWnd = procList.MainWindowHandle;
}
}
Thread.Sleep(100); // You may or may not want this
}
ShowWindow(hWnd, 0);
您可以只使用EXE本身的名稱來檢查,而不是在每個進程中檢查應用程序的標題。 我還會暫停一個好的措施。 例如,使用記事本,您可以:
Process[] ps;
DateTime timeout = DateTime.Now.AddSeconds(30);
do
{
System.Threading.Thread.Sleep(100);
ps = Process.GetProcessesByName("notepad"); // <--- no path, AND no extension (just the EXE name)
} while (ps.Length == 0 && timeout > DateTime.Now);
if (ps.Length > 0)
{
ShowWindow(ps[0].MainWindowHandle, 0);
}
else
{
MessageBox.Show("Process Not Found within Timeout Period", "Process Failed to Spawn");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.