WindowsForm зависает при повторном запуске InvokeScript (с / без асинхронного ( - PullRequest
0 голосов
/ 02 марта 2011

У меня есть один метод в моей форме окна. Когда я нажимаю кнопку, он запускает этот метод. Метод запускает контроль веб-браузера и запускает метод поста ajax на удаленном веб-сайте. Время отклика составляет 1,2-1,5 с. Я хочу запустить этот метод много раз, когда один закончен. Но это вызывает замораживание моей формы. Я пробовал фоновый рабочий, поток, таймер и т. Д., Но безуспешно. Если я добавлю thread.sleep (5000) в метод BackgroundWorker.DoWork(), проблем не будет, но я не хочу ждать 5 секунд. Я хочу сделать это, когда ответ Ajax вернулся. В моем основном методе есть WebBrowser.InvokeScript), и после получения ответа от поста ajax продолжите строку кода. Что я должен сделать для предотвращения замораживания моей формы? Извините за мой плохой английский.

Вот мой метод:

bool continueThis = true; //I have stop button for "false" 

private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
    while (continueThis)
        DoIt();
}

public void DoIt()
{
    //i tried this.Invoke too
    wbBrowser.Invoke((MethodInvoker)delegate
    {
        timeNow = DateTime.Now;

        try
        {


            string ID = productList[productListBox.SelectedIndex].ID.ToString();
            string data = dataList[0].Name;
            string dataPrice = dataList[0].Price;

            object[] args = { aID, data, dataPrice };

            // method waiting for this response. when it complete go to the next line
            wbBrowser.Document.InvokeScript("_send", args); 

            double timeElapsed = DateTime.Now.Subtract(timeNow).TotalSeconds;
            infoTxtBox.Text += timeElapsed.ToString();

            if (dataList.Count > 0)
            {
                dataList.RemoveAt(0);

            }
        }
        catch { }
    })        
}
...