使用单独的潜艇而不调用比例

时间:2015-04-30 03:22:24

标签: .net vb.net multithreading thread-safety invoke

我正在尝试实现一个线性代码,而没有任何“后台工作者”与我的主程序一起运行(除了一些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的每个实例,依此类推。

1 个答案:

答案 0 :(得分:0)

.Net Framework 4.0以来,我们已经能够使用Lambda子进行委派。您甚至可以在Sub

中调用方法

示例:

Private Sub Update()
  Me.Invoke(Sub()
              'update controls or form in here - thread safe
            End Sub)