Задержка для операций с использованием приложения WinForm в c # - PullRequest
3 голосов
/ 23 ноября 2011

У меня проблема с приложением Windows Form в C # Внутри этого приложения есть браузер с вкладками. Теперь я хочу, чтобы в цикле (где я выполнял некоторые операции для вычисления следующего URL) я мог добавить задержку между AddTab.

I.E

 foreach(Urls url in Links){

        // Do something with url
         if(url.Host == "google"){ //if host is google until start the 
                                   // next AddTab i would wait 5 SEC
             addTab(url);
           //Here i Tried to use Sleep Thread , While(TimeCur-TimePre) {} but i always 
           // get Freezing and the other Tabs dont continue the loading
             Wait 5 Seconds in somehow
         }
}

Как я уже писал, я не хочу использовать Thread Sleep, потому что он замораживает мою форму заявки. Я уже использовал трюк времени с TimeCur-TimeSaved + (x Секунда), но это также останавливает форму.

Я видел много тем, в которых люди говорят об использовании таймеров, поэтому я пытался их использовать (безрезультатно, может, я что-то не так)

Что я могу добавить в этот цикл, чтобы задержать открытие между AddTab без каких-либо зависаний?

Ответы [ 2 ]

4 голосов
/ 23 ноября 2011
    var thread = new System.Threading.Thread(p =>
    {
        lock (YourTabControl)
        {
            Action action = () =>
            {
                addTab(url);
            };
            this.Invoke(action);
            if(url.Host == "google")
                System.Threading.Thread.Sleep(5000);
        }
    });
    thread.Start();
4 голосов
/ 23 ноября 2011

Используйте таймер Windows Forms (из панели инструментов). В свойствах установите настройку интервала. Затем дважды щелкните по нему на дизайнере форм. Это создаст обработчик событий, который будет запущен (в отдельном потоке) по истечении интервала времени. Вы можете сделать свою работу здесь, и форма останется активной.

...