多线程是用于处理复杂项目的
打个比方
按你的要求其实你的代码用不到多线程,只要把sleep放到两段代码中间就可以了.
新线程结束用thread.abort()
你可以在timer前用if判断网络状态,
如断开,可用
threading.Thread.Sleep(10000) '当前线程挂起10秒
'可以开一个新线程去读取脱机数据.
如连接,则继续执行.
补充:
dim i as integer
'超过100次退出,避免死循环
for i=0 to 100
try
'ping你的端口
if 'ok
exit for
else
end
Catch ex As Exception
End Try
next
用
t.Suspend() 这个是挂起线程.是一个异步方法.
t.Sleep 我看了是一个同步方法.要等这个方法运行完了才继续下一步.
这和from.show和 from.showdiaglog区别差不多!
你真心无聊.
主线程只是通知系统,请启动一个线程运行某某函数.
Imports?System
Imports?System.Threading
Public?Class?Form1
Public?Sub?TestMethod1()
Dim?i?As?Integer
i?=?0
While?(i?1000)
Label1.Text?=?i
i?+=?1
End?While
End?Sub
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
Control.CheckForIllegalCrossThreadCalls?=?False
TestThread1?=?New?Thread(New?ThreadStart(AddressOf?TestMethod1))
TestThread1.Start()
End?Class
多线程一般是不推荐用的,因为线程之间如果有共享资源的话会引起竞争,需要加锁处理;而且线程间没有时序关系,所以你在调试中可能会出现异步处理结束顺序与开始处理顺序不一致的情况(我在调试中已经发现该问题).
针对你提出的这个问题,采用了多线程处理,利用的是BackgroundWorker也就是异步处理控件进行了处理.
代码已经经过调试通过.欢迎交流,如有问题,留下QQ或其他联系方式.
代码如下,并附程序截图.
'---------------------------------------------------
Imports?System.ComponentModel?'导入异步控件命名空间
Private?howmany?As?Integer?=?10
Private?AnalysisNumber(0?To?howmany?-?1)?As?BackgroundWorker
ListBox1.Items.Clear()
creatNewBackgroundWorker()
addHandle()
startWork()
Private?Sub?creatNewBackgroundWorker()
For?i?As?Integer?=?0?To?AnalysisNumber.Length?-?1
AnalysisNumber(i)?=?New?BackgroundWorker
Next
Private?Sub?addHandle()
AddHandler?AnalysisNumber(i).DoWork,?AddressOf?AnalysisNumber_DoWork
AddHandler?AnalysisNumber(i).RunWorkerCompleted,?AddressOf?AnalysisNumber_RunWorkerCompleted
Private?Sub?startWork()
For?j?As?Integer?=?1?To?10
temp(j?-?1)?=?10?*?i?+?j
AnalysisNumber(i).RunWorkerAsync(temp)
Private?Sub?AnalysisNumber_DoWork(ByVal?sender?As?Object,?ByVal?e?As?System.ComponentModel.DoWorkEventArgs)
Dim?data?As?Integer()
data?=?CType(e.Argument,?Integer())
Dim?temp?As?Integer
For?i?As?Integer?=?0?To?data.Length?-?1
temp?=?data(i)
data(i)?=?temp?*?temp
e.Result?=?data
Private?Sub?AnalysisNumber_RunWorkerCompleted(ByVal?sender?As?Object,?ByVal?e?As?System.ComponentModel.RunWorkerCompletedEventArgs)
data?=?CType(e.Result,?Integer())
ListBox1.Items.Add(data(i))
以上就是土嘎嘎小编为大家整理的vb.net线程互斥相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!