我有一个 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调用)。
提前感谢您的帮助!
答案 0 :(得分:1)
Log_Compressed_File
方法相同的三个参数,然后将该代码放入该方法中。Handle
。调用委托可确保访问控件Handle
的代码在正确的线程上执行。如果您没有访问控件,那么就没有Handle
那么为什么执行代码的线程有什么关系呢?