У меня есть один метод в моей форме окна. Когда я нажимаю кнопку, он запускает этот метод. Метод запускает контроль веб-браузера и запускает метод поста 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 { }
})
}