首先定義
創(chuàng)新互聯(lián)堅(jiān)信:善待客戶,將會(huì)成為終身客戶。我們能堅(jiān)持多年,是因?yàn)槲覀円恢笨芍档眯刨嚒N覀儚牟缓鲇瞥踉L客戶,我們用心做好本職工作,不忘初心,方得始終。10多年網(wǎng)站建設(shè)經(jīng)驗(yàn)創(chuàng)新互聯(lián)是成都老牌網(wǎng)站營銷服務(wù)商,為您提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、H5建站、網(wǎng)站制作、品牌網(wǎng)站制作、重慶小程序開發(fā)公司服務(wù),給眾多知名企業(yè)提供過好品質(zhì)的建站服務(wù)。
Public xlApp As Excel.Application
Public xlBook As Excel.Workbook Public xlSheet As Excel.Worksheet然后創(chuàng)建對象
xlApp = CreateObject("Excel.Application") '創(chuàng)建EXCEL對象
xlBook = xlApp.Workbooks.Open("文件路徑") '打開已經(jīng)存在的EXCEL工件簿文件
xlSheet = xlBook.Worksheets("sheet1")
Imports System.Threading
Public Class Form1
Dim t1, t2 As Thread
Dim tt1
Private Delegate Sub voiddelegate(ByVal i As Integer)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Form2.Show()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
t1 = New Thread(AddressOf test)
tt1 = 1
t1.Start()
tt1 = 2
t2 = New Thread(AddressOf test)
t2.Start()
' Timer1.Start()
End Sub
Private Sub updateui(ByVal i As Integer)
Form2.Label1.Text = i.ToString
Form2.Label2.Text = i.ToString
End Sub
'把循環(huán)放到線程中運(yùn)行會(huì)好一些,其實(shí)主要事務(wù)是對窗體控件的操作時(shí)多線程意義不大,因?yàn)樵L問窗體的代碼依然要在窗體線程中運(yùn)行。
Private Sub test()
Dim d As voiddelegate = AddressOf updateui
For i = 0 To 9000
Me.Invoke(d, i)
Next
End Sub
'如果放在計(jì)時(shí)器中運(yùn)行效果好的多
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Static i As Integer = 0
i += 1
If i 9000 Then Timer1.Stop() : i = 0
Form2.Label1.Text = i.ToString
Form2.Label2.Text = i.ToString
End Sub
End Class
'如果在另一線程中用Application.run 打開窗體確實(shí)能行,不過窗體間相互操作不起作用,這個(gè)尚待研究中。
題主是否想詢問“vbnet同時(shí)執(zhí)行多個(gè)任務(wù)怎么實(shí)現(xiàn)”?多線程操作。vbnet同時(shí)執(zhí)行多個(gè)任務(wù)通過多線程操作實(shí)現(xiàn),Visual Basic.net,屬于計(jì)算機(jī)軟件領(lǐng)域,是計(jì)算機(jī)中實(shí)現(xiàn)網(wǎng)絡(luò)功能的編程語言。
不用多線程?
即使用多線程,也不會(huì)是“同時(shí)”執(zhí)行,題主只要略懂一些計(jì)算機(jī)編譯原理就能明白了。
不用多線程更不可能讓兩個(gè)過程同步執(zhí)行了。
不過可以提供一個(gè)折衷的法子,示例如下:
Sub?a()
'過程一?
End?Sub?
Sub?b()
'過程二
End?Sub
Sub?Timer1_Tick()?'簡寫了,實(shí)際在VB.NET里不是這樣的
Timer1.Enabled?=?False?
a()
End?Sub?????
Sub?Button1_Click()?'同樣簡寫
Timer1.Enabled?=?True
b()
End?Sub
利用了一個(gè) Timer 控件,實(shí)現(xiàn)了這種偽同步(其實(shí)還是異步),a()、b() 兩個(gè)過程相互獨(dú)立切能并發(fā)運(yùn)行。
注意:上述代碼需要先把 Timer1 的 Enabled 屬性設(shè)置為 False,Interval 屬性要盡可能小。