如何使Sub解决[新线程]调用?

时间:2015-09-03 00:40:33

标签: vb.net multithreading

我有一个 BackgroundWorker 例程,它执行很多操作并调用 ThreadSafe 函数来更新UI控件。在该例程的某些点上,我调用一些子例程将日志信息写入SQL表,使用并行库在另一个Thread中创建它们。它的功能就像一个魅力。

线程LOG调用是这样的,其中 Log_Compressed_File()是一个子例程:

Dim Log_Threaded as Thread = New Thread(Sub() Log_Compressed_File(Username, UserAreaCode, Filename))
Log_Threaded.IsBackground = False
Log_Threaded.Priority = ThreadPriority.Highest
Log_Threaded.SetApartmentState(Threading.ApartmentState.MTA)
Log_Threaded.Start

如上所示,每个 log 调用都使用5行代码进行调用,定义新线程本身和一些重要参数。

我的问题是:

1)我可以生成一个Sub来解决这些调用,试图减少主程序的行吗?

只是说清楚:我在主程序中有超过35个LOG调用,如果每个代码使用5行代码,我将有175行,当我只有原来的35个调用时可以解决新线程的子程序。

2)我是否可以在 BackgroundWorker 中调用该子例程而不调用我在UI更新中使用的委托函数(ThreadSafe)?

上面显示的函数可以在 BackgroundWorker 中执行而不需要DELEGATE函数(LOG_COMPRESSED_FILE是普通的Sub,而不是Delegate调用)。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  1. 是。只需编写一个方法,使用与Log_Compressed_File方法相同的三个参数,然后将该代码放入该方法中。
  2. 是。你明白为什么你需要使用代表吗?关键是你无法访问除了创建它之外的任何线程上的控件的Handle。调用委托可确保访问控件Handle的代码在正确的线程上执行。如果您没有访问控件,那么就没有Handle那么为什么执行代码的线程有什么关系呢?