加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

2哥学Vb.net--关于线程

发布时间:2020-12-17 08:16:07 所属栏目:百科 来源:网络整理
导读:最近在努力学习vb.net,今天刚好看到一篇关于讲解多线程的文章,不知道自己理解的对不对,写了以下程序: 前置条件:点击button1,会打开计算器,同时检查F:1.log 是否存在,如果存在就关掉计算器, 点击button2,创建1.log 现在,先点击button1,再点击but
最近在努力学习vb.net,今天刚好看到一篇关于讲解多线程的文章,不知道自己理解的对不对,写了以下程序:
前置条件:点击button1,会打开计算器,同时检查F:1.log 是否存在,如果存在就关掉计算器,
点击button2,创建1.log
现在,先点击button1,再点击button2
代码如下:

Imports System.Threading
Public Class Form1
'===========================方法1=========================================
Public Sub New()
InitializeComponent()

'Control.CheckForIllegalCrossThreadCalls = False '将其设置为true(默认为真),在me.close 处会报错,'设置为False,但是还是会抛出异常。

End Sub
'===========================方法1=========================================

Private firstThread As Thread

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button1.Click
'启动calc
Dim myProcess As Process = System.Diagnostics.Process.Start("calc.exe")
'创建新线程
firstThread = New Thread(AddressOf xx)
firstThread.Start()
End Sub


Private Sub Button2_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) Handles Button2.Click
writLog("xxx")
End Sub

Public Sub writLog(ByVal strParemeter)
My.Computer.FileSystem.WriteAllText("F:1.log",strParemeter,True,System.Text.Encoding.UTF8)
End Sub

Public Sub xx()
Try
Do While 1
If My.Computer.FileSystem.FileExists("F:1.log") Then
Thread.Sleep(1000)
'找到进程calc,并关掉
Dim findProcess As Process() = Process.GetProcessesByName("calc")
findProcess(0).Kill()

'关掉firstThread线程
'firstThread.Abort() '方法1
StartDelegate() '方法2
Exit Do
End If
Loop
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
'Me.Close '方法1
End Try
End Sub

'===========================方法2=========================================
Private Delegate Sub TestDelegate() ’这个方法本人还不是很懂,委托(不需要参数,没有返回值) 下阶段学习对象

Private Sub DelegateMethod()
firstThread.Abort()
Me.Close()
End Sub

Private Sub StartDelegate()
Me.BeginInvoke(New TestDelegate(AddressOf DelegateMethod))
End Sub
'===========================方法1=========================================
End Class

线程的相关的些知识:
线程取消:CancelTask()
线程的优先级:System.Threading.Thread.Priority
线程的状态:线程从创建到终止,它一定处于某一个状态,而这个状态是由System.Threading.Thread.ThreadState属性定义的。当一个线程刚被创建时,它处在Unstarted状态,然后Thread类的Start() 方法将使线程状态变为Running状态,如果不调用相应的方法使线程挂起、阻塞、销毁或者终止,则线程将一直保持这样的状态。挂起的线程处于Suspended状态,直到我们调用resume()方法使其重新执行,这时候线程将重新变为Running状态。一旦线程被销毁或者终止,则线程处于Stopped状态,处于这个状态的线程将不复存在。线程还有一个Background状态,它表明线程运行在前台还是后台。
此外还有线程池,线程的同步等等。。。。。有待研究

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读