国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

在VB中異步執行程序

2019-11-18 17:32:56
字體:
來源:轉載
供稿:網友
使用VisualBasic編寫應用程序的開發人員一定都遇到過這樣的情形:當你的應用程序要完成一個比較大的任務時,并且該任務是那種“獨占式”的任務(比如:使用函數FileCopy復制一個超過50MB的文件),如果不對程序作出特殊的處理,則用戶將被迫面對一個像是被“掛起”的窗體,任憑你用鼠標怎樣點擊也沒有任何反應,更糟糕的是當你從屏幕保護程序切換回該程序時會看到程序的窗體變成了一塊“白布”,這更加給人一種“死機”的感覺。如何避免這種尷尬的界面出現呢?筆者在實踐中發現了一種簡單的辦法,在這里介紹給大家,希望能對您有所幫助。

----這種辦法是利用VisualBasic提供的創建ActiveX部件的功能設計一個專門完成“大任務”的ActiveX部件。這里對ActiveX部件作如下簡單介紹,以期適合不同的讀者。VisualBasic所能設計的部件共有兩種:一種是可視的部件;另一種是不可視的部件。ActiveX控件和窗體一起構成了應用程序與用戶交互的界面,ActiveX文檔使用在Internet應用程序中。由于我們的問題不涉及到可視的部件,所以這里不再贅述。

----不可視的部件又稱為代碼部件,包括ActiveDLL部件和ActiveXEXE部件兩種。ActiveX部件的另一個名稱是ActiveX服務器,之所以被稱作服務器是由于ActiveX部件與使用它們的應用程序之間的關系可以被類比為服務器程序與客戶端程序之間的關系:ActiveX部件封裝了特定的功能或業務規則,應用程序不需要知道ActiveX部件是如何實現這些功能或業務規則的,只需要通過ActiveX部件提供的編程接口(API)傳遞應用程序的要求(通過屬性或方法的參數),然后從部件的事件獲得執行結果。根據ActiveX部件(ActiveX服務器)的執行方式可以把ActiveX部件分為進程內部件和進程外部件,所謂進程內部件即部件和使用它們的應用程序執行時共享同一個進程;而進程外部件卻執行在自己的進程中,也可以這樣認為:進程外部件的執行不影響使用它們的應用程序!顯然,這個特性正是本文開始面對的那個問題所需要的。在部件中只有ActiveXEXE部件是進程外部件,因此利用這個特性我們可以創建一個ActiveXEXE部件來完成“大任務”,而應用程序窗體只顯示一些任務的提示信息,直到ActiveXEXE部件的類的事件提示任務結束為止。這樣應用程序就避免了那種呆板的“白布”窗體的出現,而能夠響應任何來自用戶的操作或者當從那些遮蓋住它的程序切換回來時自行刷新。給用戶的感覺是程序是在“異步”執行。

----下面我們通過例子來看如何實現這一想法:這個例子中,我們假設應用程序窗體是一個一直顯示當前時間的數字時鐘,當你使其執行“大任務”直到任務的完成,這期間你會發現數字時鐘窗體從來就沒有被“掛起”過,仍然能夠響應你的拖動操作和不停地顯示時間。以下是實現這一程序和ActiveXEXE部件的步驟及源代碼:

1.創建ActiveXEXE部件(BigJobServer)

----步驟一:打開VisualBasic6.0新建一個VB工程,工程類型選擇ActiveXEXE,在工程資源管理器中選中工程1,然后在屬性窗口中將其名稱改為BigJobServer。

----步驟二:為工程添加一個Timer控件的容器窗體(添加窗體通過菜單工程>添加窗體完成)。窗體名稱改為frmClock;在窗體上放置一個Timer控件(從工具箱中選擇Timer控件),名稱改為timClock。

----說明:添加該窗體的用意是提供一個執行任務的定時器(Timer控件)

----步驟三:設計實現“大任務”的類BigJob(注:代碼部件是通過各種類實現應用程序交給它的任務的,關于類的創建請參考《手冊》或MSDN文檔),默認情況下當你新建ActiveXEXE部件時VisualBasic為你添加了一個名為Class1的類(要增加類通過菜單工程>添加類模塊完成),從工程資源管理器中選中Class1,然后在屬性窗口中設置如下屬性:

----(名稱):BigJob

----Instancing:5-MultiUse

----編寫API:為類BigJob添加方法和事件(通過菜單工具>添加過程完成)部分代碼及程序說明如下:

  • 上述程序在VisualBasic6.0中文企業版上調試通過。
  • 要在你的程序中實現這種方法,可以改進ActiveXEXE部件。比如在類BigJob中把doBigJob過程替換為你的具體任務;或通過添加屬性來傳遞適當的任務參數等等。
  • 關于ActiveXEXE部件的編譯和發布問題,請參考《VisualBasic聯機手冊》或MSDN文檔。
  • ->


    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 庆城县| 庆云县| 色达县| 滦平县| 钟祥市| 邯郸县| 集贤县| 朔州市| 天等县| 商城县| 峡江县| 方山县| 澎湖县| 仁化县| 库尔勒市| 邻水| 阿鲁科尔沁旗| 阜康市| 科技| 阿荣旗| 黄陵县| 盐山县| 淳化县| 长子县| 深水埗区| 时尚| 焦作市| 信阳市| 潼关县| 郎溪县| 泸水县| 延寿县| 视频| 三河市| 斗六市| 康平县| 田林县| 仁怀市| 龙州县| 绥阳县| 天气|