0

我有一个Datagridview在每行中包含几列和数据的。我需要定期发送完整的 Datagridview 数据,每行数据一次一个,按顺序发送到web browser我的应用程序中,这实际上会将此行数据附加到网站的 URL,该 URL 将回显附加到它的任何数据。所以为了这个目的,我使用了一个timer它将为每个发送一次所有数据10 seconds。在计时器内一次发送每一行,我使用了以下内容for loop

private void tmr_senddata_Tick(object sender, EventArgs e)
{
    if(dg_parameters.Rows.Count!=1)
    {
        for (int i = 0; i < dg_parameters.Rows.Count-1; i++)
        {
            string row = "";
            string cell = "";
            for (int j = 0; j < dg_parameters.Columns.Count; j++)
            {
                cell = cell + dg_parameters.Rows[i].Cells[j].Value;
                cell = cell + "@";
                row = cell;
            }
            string uri = webBrowser1.Url + row;
            webBrowser1.Navigate(uri);
        }
    }
}

现在我结束的只是last row being displayed on the browser. 这是因为当我的浏览器在我的循环中第一次导航到指定的 URL 时,下一次迭代需要和 URL 更改。所以只有我的最后一行数据被正确导航并显示在浏览器上。如何每次都在指定的时间内停止 for 循环,以便我可以看到我的浏览器导航到 URL。我认为Thread.Sleep()这不是一个好主意,因为它会阻塞我的 UI 线程。

更新:这是一个用于测试特定场景的模拟应用程序。所以请忽略这样做的原因。解决问题会很好。

4

2 回答 2

4

将您dg_parameters.RowsQueue应用程序启动时放入。

每次计时器触发时,调用myQueue.Dequeue以获取下一个要使用的项目。

于 2012-08-21T04:36:55.427 回答
0

为什么不使用WebBrowser.DocumentCompleted Event.
文档完全下载后,您可以调用 tmr_senddata_Tick。
如果您不希望您的界面受到影响,您也可以在后台线程上传输整个内容。

例子:-

private void setevent()
{
    webBrowserForPrinting.DocumentCompleted +=
        new WebBrowserDocumentCompletedEventHandler(NavigateTo);

}

private void NavigateTo(object sender,
    WebBrowserDocumentCompletedEventArgs e)
{
   //Pause thread as per the need.
   if(dg_parameters.Rows.Count!=1)
        {
            for (int i = 0; i < dg_parameters.Rows.Count-1; i++)
            {
                string row = "";
                string cell = "";
                for (int j = 0; j < dg_parameters.Columns.Count; j++)
                {
                    cell = cell + dg_parameters.Rows[i].Cells[j].Value;
                    cell = cell + "@";
                    row = cell;
                }
                string uri = webBrowser1.Url + row;
                webBrowser1.Navigate(uri);
            }
        }
}
于 2012-08-21T04:42:48.473 回答