本文介绍了同步线程会禁用我的应用程序工具的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用同步线程,但是当线程启动时我无法点击我的应用程序上的anthing ...但我需要在应用程序上做一些工作,即使线程计时器已打开,所以怎么能我这样做了吗?
请注意我在vs 2010上使用vb.net
这里是我的代码:
私人 共享线程作为 新 System.Threading.AutoResetEvent( False )
私有 Sub start_btn_Click( sender As System。 Object ,e As System.EventArgs)句柄 start_btn.Click
StartTask()
结束 Sub
Sub StartTask()
Dim Tpool As System.Threading.ThreadPool
Dim arg 作为 字符串 = SomeArg
ThreadPool.QueueUserWorkItem( New System.Threading.WaitCallback(_
AddressOf 任务),arg)' 将任务排队。
thread.WaitOne( )' 等待线程调用Set。
writeMsg( 线程完成。 at, list_rpt)
StartTask()
结束 Sub
Sub 任务( ByVal Arg 作为 对象)
writeMsg( 线程从, list_rpt)
System.Threading.Thread.Sleep( 4000 )' 等待4秒。
DoWork()
结束 Sub
公开 Sub DoWork()
MTProcessTable = selectMtProcess()
mtCount = MTProcessTable.Row s.Count
writeMsg(mtCount& 在, list_rpt)
对于 每个 row 作为 DataRow 在 MTProcessTable.Rows
process = 新 Process_class
process.id = row( mt_id)
process.mo = row( mt_mo)
流程.mt = row( mt_mt)
process.datain = row( mt_datain)
keyid = validateKey(process.datain)
MOTable = selectMO(process.mo,process.mt)
moRowNb = MOTable.Rows.Count()
MO = 新 MO_class
如果 moRowNb< ;> 0 然后
MOrow = MOTable.Rows( 0 )
MO.newuser = MOrow( newuser)
MO.sim_id = MOrow( sim_id)
结束 如果
尝试
选择 案例 keyid
案例 1
如果 moRowNb = 0 然后
如果 insertMO(process.mo,process.mt)然后
writeMsg( 1 MO插入/更新为, rpt_txt)
message = msgTable.Rows( 0 )( 1 )。ToString()
MsgBox(消息)
否则
writeMsg ( 1 MO无法插入, rpt_txt)
结束 如果
结束 如果
案例 2
如果 moRowNb = 0 那么
writeMsg( 1进程,MO未激活,数据'是',, rpt_txt)
message = msgTable.Rows( 7 )( 1 )。ToString()
MsgBox(消息)
结束 如果
Catch ex As 异常
logFile( executeTimer ----& ex.Message)
updateProcessed(process.id,ex.Message, 10 )
最后
updateProcessed(process.id,message, 1 )
结束 尝试
下一步行
thread。设置()
结束 Sub
解决方案
这篇关于同步线程会禁用我的应用程序工具的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!