timer定時(shí)器,本來(lái)就是非精確的,且最小觸發(fā)時(shí)間不是1毫秒,也做不到20毫秒一觸發(fā)。
創(chuàng)新互聯(lián)公司從2013年成立,先為石棉等服務(wù)建站,石棉等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為石棉企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
它的最小觸發(fā)時(shí)間大概是10多毫秒。有人說(shuō)是55毫秒,但可以做以下測(cè)試(新建一個(gè)程序測(cè)試)
設(shè)置觸發(fā)間隔為20毫秒:
Private?Sub?Timer1_Timer()
Static?n?As?Integer
Print?Timer
n?=?n?+?1
If?n??15?Then?Timer1.Enabled?=?False
End?Sub
1427.281?
1427.328?
1427.359?
1427.39?
1427.421?
1427.453?
1427.484?
1427.515?
1427.546?
1427.578?
1427.609?
1427.64?
1427.671?
1427.703?
1427.734?
1427.765
因?yàn)槭录?nèi)包含了簡(jiǎn)單的計(jì)算和打印會(huì)占用一定的時(shí)間,平均一下大概是30多毫秒。
你要想準(zhǔn)確,可以用多媒體定時(shí)器,百度一下多媒體定時(shí)器(API:GetTickCount),然后試試。
使用多線程。
如果操作時(shí)候長(zhǎng)了,就把查詢(xún)操作放在多線程里去執(zhí)行,不要在窗體的主線程里執(zhí)行。
因?yàn)槎〞r(shí)器是通過(guò)Windows消息來(lái)實(shí)現(xiàn)的,而你的數(shù)據(jù)庫(kù)操作阻塞了窗口線程,所以,窗口無(wú)法處理Windows消息。
動(dòng)畫(huà)的幀播放也是如此。
/----------------------
那就創(chuàng)建一條線程,然后在線程里執(zhí)行數(shù)據(jù)庫(kù)操作啊!
參見(jiàn) System.Threading.Thread 對(duì)象。
在VB.NET中,帶框架窗體的大小是不能為0的,要想做到高、寬都為0,需要自己重繪一個(gè)無(wú)邊框窗體,用外置圖片來(lái)繪制,配合PS做一些圖片,既可以換膚還能做的很漂亮。
按當(dāng)前代碼修改,你把下面的代碼粘回去就可以了,窗體的高和寬達(dá)到最小時(shí),循環(huán)會(huì)自己退出,避免無(wú)限循環(huán);
Select?Case?2
Case?Is?=?1
Dim?w?As?Integer?=?Me.Width
Do
Me.Width?-=?5?:?w?-=?5
Threading.Thread.Sleep(3)
Loop?While?Me.Width?=?w
Case?Is?=?2
Dim?h?As?Integer?=?Me.Height
Do
Me.Height?-=?5?:?h?-=?5
Threading.Thread.Sleep(3)
Loop?While?Me.Height?=?h
Case?Is?=?3
Do
Me.Opacity?-=?0.05
Threading.Thread.Sleep(120)
Loop?Until?Me.Opacity?=?0
End?Select
vb.net有的版本timer子程序讀取子程序外面的全局變量有時(shí)出錯(cuò),要么升級(jí)到高版本如2008(我使2005就有這個(gè)問(wèn)題),要么在窗口上插個(gè)Label1并使 Label1.Hide() ,以后就用Label1.Text代替flag2,實(shí)際上Label1的名稱(chēng)可以改如v_flag2。換句話(huà)說(shuō)是用控件值代替全局變量。
是不是另一臺(tái)電腦是vista 及以上版本的系統(tǒng) ?
用管理員模式。試試