我的Windows窗体中有一个方法。当我单击按钮时,它运行此方法。方法在远程网站上运行webbrowser控件并触发ajax post方法。响应时间为1.2-1.5秒。我想在一个完成后多次运行这个方法。但它导致冻结我的形式。我尝试了后台工作者,线程,计时器等,但没有成功。如果我在BackgroundWorker.DoWork()
方法中放置thread.sleep(5000)没有问题,但我不想等待5秒。当ajax响应回来时,我想这样做。我的main方法中有WebBrowser.InvokeScript)
,在得到ajax post的响应之后继续代码行。我应该怎么做以防止我的表格冻结?抱歉我的英语很差。
这是我的方法:
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 { }
})
}