Откройте несколько вкладок в IE9, используя Process - PullRequest
1 голос
/ 01 июня 2011

Я пытаюсь открыть несколько веб-страниц в одном сеансе 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);
                        }
                    }

Ответы [ 2 ]

0 голосов
/ 01 июня 2011
foreach (string url in urls)
{
    try
    {
        if (!isLaunched)
        {
            Process p = new Process();
            p.StartInfo.FileName = browser;
            p.StartInfo.Arguments = url;
            p.Start();

            if(!p.WaitForInputIdle()){ //Should wait indefinitely until the 
                                       //process is idle
              Thread.Sleep(1000);// Just in case the process has no message loop
            }

            isLaunched = true;
        }
        else
        {
            Process.Start(url);
        }
    }
}
0 голосов
/ 01 июня 2011

Не совсем то, что вы просили, но я нашел this

Командная строка переключает для ie, похоже, не поддерживает запуск вкладок: /

...