我正在尝试实现一个线性代码,而没有任何“后台工作者”与我的主程序一起运行(除了一些System.Windows.Forms.Timers)。我正在使用私有子,以便在我的程序中消除复制和粘贴的需要,例如,相同的50行代码10次(使编辑和浏览更容易)。但是,我遇到了交叉线程的问题。据我所知,因为我没有从UI线程访问属性,代码:
Private Sub Update()
DataGridView1.Rows.Clear()
...
...
...
End Sub
给我错误:
控制从其创建的线程以外的线程访问的“DataGridView1”。
到目前为止,我一直在我的form_load事件中使用Control.CheckForIllegalCrossThreadCalls = False
,但现在我遇到了一些问题,计时器没有重新启动。
有没有办法可以让它线性运行所以我不必每次调用该方法?我现在有大约2000行代码,我不得不经历并调用Button50.enabled = true
的每个实例,依此类推。
答案 0 :(得分:0)
自.Net Framework 4.0
以来,我们已经能够使用Lambda子进行委派。您甚至可以在Sub
。
示例:
Private Sub Update()
Me.Invoke(Sub()
'update controls or form in here - thread safe
End Sub)