如何在parallel.For中使用DataGridView?
How to use DataGridView in parallel.For?
这是我的程序的一部分:
Parallel.For(1, m,
Sub(i)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Dim html As String = ""
Dim request As HttpWebRequest = HttpWebRequest.Create(slink(i, 1))
request.AutomaticDecompression = DecompressionMethods.GZip
request.Timeout = 500
request.Method = "GET"
request.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"
Using response As Task(Of WebResponse) = request.GetResponseAsync
If response.Result IsNot Nothing Then
Using ioStream As IO.Stream = response.Result.GetResponseStream
Using sr As New System.IO.StreamReader(ioStream)
html = sr.ReadToEnd
s = html.Split(";")
r = s(0).Split(",")
row = New String() {r(0),r(1),r(2),r(3),r(4),r(5)}
DataGridView1.Rows.Add(row)
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1
End Using
End Using
End If
End Using
End Sub)
当我运行程序时,出现如下错误。我该如何解决这个问题?
'System.InvalidOperationException' 类型的异常发生在 System.Windows.Forms.dll 中,但未在用户代码中处理
附加信息:跨线程操作无效:控件 'DataGridView1' 从创建它的线程以外的线程访问。
最简单的选择是替换这些行:
DataGridView1.Rows.Add(row)
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1
有了这个:
DataGridView1.BeginInvoke(Sub()
DataGridView1.Rows.Add(row)
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1
End Sub)
要了解有关其工作原理以及如何使用一致的分步过程来编组对 UI 线程的调用的更多信息,请参阅 here。
这是我的程序的一部分:
Parallel.For(1, m,
Sub(i)
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Dim html As String = ""
Dim request As HttpWebRequest = HttpWebRequest.Create(slink(i, 1))
request.AutomaticDecompression = DecompressionMethods.GZip
request.Timeout = 500
request.Method = "GET"
request.UserAgent = "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"
Using response As Task(Of WebResponse) = request.GetResponseAsync
If response.Result IsNot Nothing Then
Using ioStream As IO.Stream = response.Result.GetResponseStream
Using sr As New System.IO.StreamReader(ioStream)
html = sr.ReadToEnd
s = html.Split(";")
r = s(0).Split(",")
row = New String() {r(0),r(1),r(2),r(3),r(4),r(5)}
DataGridView1.Rows.Add(row)
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1
End Using
End Using
End If
End Using
End Sub)
当我运行程序时,出现如下错误。我该如何解决这个问题?
'System.InvalidOperationException' 类型的异常发生在 System.Windows.Forms.dll 中,但未在用户代码中处理
附加信息:跨线程操作无效:控件 'DataGridView1' 从创建它的线程以外的线程访问。
最简单的选择是替换这些行:
DataGridView1.Rows.Add(row)
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1
有了这个:
DataGridView1.BeginInvoke(Sub()
DataGridView1.Rows.Add(row)
DataGridView1.FirstDisplayedScrollingRowIndex = DataGridView1.RowCount - 1
End Sub)
要了解有关其工作原理以及如何使用一致的分步过程来编组对 UI 线程的调用的更多信息,请参阅 here。