Я пытаюсь открыть несколько веб-страниц в одном сеансе IE9.Кажется, мне нужно немного подождать после открытия первого URL, прежде чем я смогу открыть остальные, но использование Thread.Sleep кажется хакерским.Можно ли как-нибудь лучше?
foreach (string url in urls)
{
try
{
if (!isLaunched)
{
Process p = new Process();
p.StartInfo.FileName = browser;
p.StartInfo.Arguments = url;
p.Start();
Thread.Sleep(1000); // somewhere between 500 and 1000
isLaunched = true;
}
else
{
Process.Start(url);
}
}
}
Примечание. Если я не буду ждать времени, у меня будет один сеанс браузера с одной страницей (последняя страница.
Обновление: - Я пытался p.WaitForInputIdle (), но он не работал. - За http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/fe4be58f-9c9d-4e52-8ced-e3cd9c1bbee7 Я также пытался
int i = 0;
while (i == 0)
{
Console.WriteLine("!$@!");
Thread.Sleep(100);
p.Refresh();
i = p.MainWindowHandle.ToInt32();
}
, но получил ошибку:
Process has exited, so the requested information is not available.
at System.Diagnostics.Process.EnsureState(State state)
at System.Diagnostics.Process.get_MainWindowHandle()
Обновление 2: Приведенный ниже код работает (ожидает запуска IE9 для выхода), но все еще требует Thread.Sleep (100). Меньше, и иногда он только поднимает часть сайтов... Нет ... поцарапайте это, это работает, только если уже есть сеанс IE. Процесс завершается, потому что он передает URL-адрес существующему сеансу IE.
foreach (string url in urls)
{
try
{
if (!isLaunched)
{
Process p = new Process();
p.StartInfo.FileName = browser;
p.StartInfo.Arguments = url;
p.Start();
p.WaitForExit();
Thread.Sleep(100);
isLaunched = true;
}
else
{
Process.Start(url);
}
}