干什么要鎖定?程序員不寫加載圖片的代碼,用戶沒辦法自己加載圖片的,你只要加載了圖片后不去管他就是了么
成都創(chuàng)新互聯(lián)公司長期為超過千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為定西企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,定西網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
不明白為什么不管他不能解決問題。你是不是寫了加載圖片功能,但希望用戶只能用一次加載后不能再加載?那只要加個變量記錄一下就可以?;蛘咧苯优袛鄍icturebox的圖片屬性是否不為空也可以
使用 Explicitily(拼寫不一定正確),就可以正常使用close方法關(guān)閉窗體。只是窗體關(guān)閉后,仍然駐留內(nèi)存中,但是不影響程序的再次啟動。如果是反復(fù)調(diào)試程序,則必須在UG中手動卸載(文件-實用工具-卸載共享圖像,這個“圖像”應(yīng)該是翻譯錯誤,實際上就是程序在內(nèi)存中的實例)。
多線程一般是不推薦用的,因為線程之間如果有共享資源的話會引起競爭,需要加鎖處理;而且線程間沒有時序關(guān)系,所以你在調(diào)試中可能會出現(xiàn)異步處理結(jié)束順序與開始處理順序不一致的情況(我在調(diào)試中已經(jīng)發(fā)現(xiàn)該問題)。
針對你提出的這個問題,采用了多線程處理,利用的是BackgroundWorker也就是異步處理控件進行了處理。
代碼已經(jīng)經(jīng)過調(diào)試通過。歡迎交流,如有問題,留下QQ或其他聯(lián)系方式。
代碼如下,并附程序截圖。
‘---------------------------------------------------
Imports?System.ComponentModel?'導(dǎo)入異步控件命名空間
Public?Class?Form1
Private?howmany?As?Integer?=?10
Private?AnalysisNumber(0?To?howmany?-?1)?As?BackgroundWorker
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
ListBox1.Items.Clear()
creatNewBackgroundWorker()
addHandle()
startWork()
End?Sub
Private?Sub?creatNewBackgroundWorker()
For?i?As?Integer?=?0?To?AnalysisNumber.Length?-?1
AnalysisNumber(i)?=?New?BackgroundWorker
Next
End?Sub
Private?Sub?addHandle()
For?i?As?Integer?=?0?To?AnalysisNumber.Length?-?1
AddHandler?AnalysisNumber(i).DoWork,?AddressOf?AnalysisNumber_DoWork
AddHandler?AnalysisNumber(i).RunWorkerCompleted,?AddressOf?AnalysisNumber_RunWorkerCompleted
Next
End?Sub
Private?Sub?startWork()
For?i?As?Integer?=?0?To?9
Dim?temp(0?To?9)?As?Integer
For?j?As?Integer?=?1?To?10
temp(j?-?1)?=?10?*?i?+?j
Next
AnalysisNumber(i).RunWorkerAsync(temp)
Next
End?Sub
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
Next
e.Result?=?data
End?Sub
Private?Sub?AnalysisNumber_RunWorkerCompleted(ByVal?sender?As?Object,?ByVal?e?As?System.ComponentModel.RunWorkerCompletedEventArgs)
Dim?data?As?Integer()
data?=?CType(e.Result,?Integer())
For?i?As?Integer?=?0?To?data.Length?-?1
ListBox1.Items.Add(data(i))
Next
End?Sub
End?Class
vb6或者vb.net調(diào)用C++的Dll動態(tài)鏈接庫,都需要進行二次封裝,這是沒辦法的,打開.H包含文件,所需要的結(jié)構(gòu)體和函數(shù)都需要定義,類似于vb調(diào)用API函數(shù),下面舉個例子:
System.Runtime.InteropServices.DllImport ( "Shell32.dll" ) _
Public Function _
ExtractIcon ( ByVal src As System.IntPtr , ByVal strFileName As String , ByVal uiIconIndex As UInt32 ) As System.IntPtr
End Function
'聲明ExtractIcon函數(shù)
這樣在程序中可以調(diào)用它了:
Dim hIcon As System.IntPtr = ExtractIcon ( IntPtr.Zero , sfName , 0 )
如何處理鎖死?同步的程序就有這個缺陷,條件得不到滿足就不會返回。所以想不鎖死就只能滿足
a.StandardOutput.ReadLine的需求。
如果確實滿足不了或者無法預(yù)料能否滿足怎么辦?
將這個方法放入一個線程,這樣線程鎖死,主程序界面也不會鎖死,還是會響應(yīng)用戶操作,而且主線程可以設(shè)定一個等待時間,如果超時就殺死線程。
打開的資源你沒有關(guān)閉,可能你缺少調(diào)用類似FileStream.Close() 的方法.