資源指的是文字、圖片、音樂(lè)、動(dòng)畫(huà)等,而dll是程序代碼,不屬于資源的行列,所以你說(shuō)的無(wú)法實(shí)現(xiàn)。
創(chuàng)新互聯(lián)建站是一家成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,提供網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),網(wǎng)站制作,建網(wǎng)站,按需網(wǎng)站策劃,網(wǎng)站開(kāi)發(fā)公司,成立與2013年是互聯(lián)行業(yè)建設(shè)者,服務(wù)者。以提升客戶品牌價(jià)值為核心業(yè)務(wù),全程參與項(xiàng)目的網(wǎng)站策劃設(shè)計(jì)制作,前端開(kāi)發(fā),后臺(tái)程序制作以及后期項(xiàng)目運(yùn)營(yíng)并提出專業(yè)建議和思路。
如果一定要放在資源里,只能先釋放出來(lái)形成一個(gè)文件,然后再調(diào)用這個(gè)文件,不過(guò)需要注意的是,這個(gè)過(guò)程會(huì)被很多殺毒軟件判定為病毒。
要在VB.NET中清屏已經(jīng)不再是象是在VB6中那么簡(jiǎn)單使用一條Cls就能搞定的,因?yàn)楝F(xiàn)在的VB.NET已經(jīng)是完全面向?qū)ο蟮恼Z(yǔ)言了,方法就不能和以前那樣了,下面給出清空窗體的源代碼,通過(guò)單擊按鈕清空,如下:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim g As Graphics
g = Me.CreateGraphics
g.Clear(Me.BackColor)
g.Dispose()
'釋放對(duì)象g所占用的資源
End Sub
OK,程序已經(jīng)成功實(shí)現(xiàn)你要的功能,運(yùn)行環(huán)境VS.NET2003+Windows 2003 Server
歡迎你加入群:30538950進(jìn)行交流!
1.如果你釋放的是托管托管代碼的內(nèi)存,那么托管代碼的內(nèi)存管理是自動(dòng)的,.NET可以保證我們的托管程序在結(jié)束時(shí)全部釋放。
2.如果是非托管資源時(shí).NET就不能自動(dòng)管理了,下面是釋放非托管資源內(nèi)存方法
當(dāng)我們利用如數(shù)據(jù)庫(kù)、文件等非托管資源時(shí),就要用到.NET Framework中的標(biāo)準(zhǔn): IDisposable接口。按照標(biāo)準(zhǔn),所有有需要手動(dòng)釋放非托管資源的類都得實(shí)現(xiàn)此接口。這個(gè)接口只有一個(gè)方法,Dispose(),不過(guò)有相對(duì)的 Guidelines指示如何實(shí)現(xiàn)此接口,在這里我向大家說(shuō)一說(shuō)。實(shí)現(xiàn)IDisposable這個(gè)接口的類需要有這樣的結(jié)構(gòu):
[Visual Basic]
Public Class Base
Implements IDisposable
Public Overloads Sub Dispose() Implements IDisposable.Dispose
Me.Dispose(True)
GC.SuppressFinalize(Me)
End Sub
Protected Overloads Overridable Sub Dispose(ByVal disposing As Boolean)
If disposing Then
' 托管類
End If
' 非托管資源釋放
End Sub
Protected Overrides Sub Finalize()
Me.Dispose(False)
MyBase.Finalize()
End Sub
End Class
Public Class Derive
Inherits Base
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
' 托管類
End If
' 非托管資源釋放
MyBase.Dispose(disposing)
End Sub
End Class
我們要實(shí)現(xiàn)Dispose方法,實(shí)現(xiàn)這個(gè)Dispose方法的幾個(gè)準(zhǔn)則:
它不能扔出任何錯(cuò)誤,重復(fù)的調(diào)用也不能扔出錯(cuò)誤。也就是說(shuō),如果我已經(jīng)調(diào)用了一個(gè)對(duì)象的Dispose,當(dāng)我第二次調(diào)用Dispose的時(shí)候程序不應(yīng)該出錯(cuò),簡(jiǎn)單地說(shuō)程序在第二次調(diào)用Dispose時(shí)不會(huì)做任何事。這些可以通過(guò)一個(gè)flag或多重if判斷實(shí)現(xiàn)。
一個(gè)對(duì)象的Dispose要做到釋放這個(gè)對(duì)象的所有資源。拿一個(gè)繼承類為例,繼承類中用到了非托管資源所以它實(shí)現(xiàn)了IDisposable接口,如果繼承類的基類也用到了非托管資源那么基類也得被釋放,基類的資源如何在繼承類中釋放呢?當(dāng)然是通過(guò)一個(gè)virtual/Overridable方法了,這樣我們能保證每個(gè)Dispose都被調(diào)用到。這就是為什么我們的設(shè)計(jì)有一個(gè)virtual/Overridable的Dispose方法。注意我們首先要釋放繼承類的資源然后再釋放基類的資源。
因?yàn)榉峭泄苜Y源一定要被保障正確釋放所以我們要定義一個(gè)Finalizer來(lái)避免程序員忘了調(diào)用Dispose的情況。上面的設(shè)計(jì)就采用了這種形式。如果我們手動(dòng)調(diào)用Dispose方法就沒(méi)有必要再保留Finalizer了,所以在Dispose中我們用了GC.SupressFinalize 將對(duì)象從Finalizer表去掉,這樣再回收時(shí)速度會(huì)更快。
那么那個(gè)disposing和"托管類"是怎么回事呢?是這樣:在"托管類"中寫(xiě)所有你想在調(diào)用Dispose時(shí)讓其處于可釋放狀態(tài)的托管代碼。還記得我們說(shuō)過(guò)我們不知道托管代碼是什么時(shí)候釋放的嗎?在這里我們只是去掉成員對(duì)象的引用讓它處于可被回收狀態(tài),并不是直接釋放內(nèi)存。在"托管類"中這里我們也要寫(xiě)上所有實(shí)現(xiàn)了IDisposable的成員對(duì)象,因?yàn)樗麄円灿蠨ispose,所以也需要在對(duì)象的Dispose中調(diào)用他們的 Dispose,這樣才能保證第二個(gè)準(zhǔn)則。disposing是為了區(qū)分Dispose的調(diào)用方法,如果我們手動(dòng)調(diào)用那么為了第二個(gè)準(zhǔn)則"托管類"部分當(dāng)然得執(zhí)行,但如果是Finalizer調(diào)用的Dispose,這時(shí)候?qū)ο笠呀?jīng)沒(méi)有任何引用,也就是說(shuō)對(duì)象的成員自然也就不存在了(無(wú)引用),也就沒(méi)有必要執(zhí)行"托管類"部分了,因?yàn)樗麄円呀?jīng)處于可被回收狀態(tài)了。好了,這就是IDisposable接口的全部了。現(xiàn)在讓我們來(lái)回想一下,以前我們可能認(rèn)為有了 Dispose內(nèi)存就會(huì)馬上被釋放,這是錯(cuò)誤的。只有非托管內(nèi)存才會(huì)被馬上釋放,托管內(nèi)存的釋放由GC管理,我們不用管。