2011年7月22日 星期五

#VB ASP.NET 顯示執行中的動畫圖示


目前適用 panel 去做

但這樣如果動作之後會跳出新視窗
會蓋過母視窗
這樣就看不到Loading
不然就是每個Form都弄

在需要跳出新視窗之前
先讓他跑動畫(新視窗)
(母視窗的動畫依然在跑)
結束時一起結束


=====================

什麼東西適合用背景執行,

什麼東西是合用"委派"

=====================================

目前先透過panel去做

等找到說可以自己寫panel去弄一個透明度再來改

=========================================

透過背景執行的話,好像不能在背景執行緒下叫用Module裡的變數

問題在哪裡我還看不太出來,但是應該可以改

而且發現如果真的叫用另一個form
有一些msgbox出來(母form)
就會變成說按不到msgbox的確認鍵...

===============================================

大概知道應該是說

我圖片背景執行以後的動作
應為控制權的關係
沒辦法及時跑回原執行緒
去做其他母Form的動作

1.轉換控制權
2.把接下來的動作丟到另一個背景執行

2.可行,(但是就沒有透明度)
    當執行某個動作以後,就是鎖住整個form,讓使用者一次只做一個動作

====================================

應該是可以,但是不知道為什麼

會卡住,然後好像也在做換圖的動作,

但是圖片卻沒顯示出來


要再查一下


測試時發現

如果呼叫動畫Form以後
在母Form的呼叫按鈕下,有其他動作
就會發生上面的問題
在想是因為控制權轉移到了動畫Form的問題
看能不能馬上轉回來

===================================

1.在原Form 寫好timer啟動,並且每秒去check是否應該關掉動畫Form


2.動畫Form 將切換圖片的部分放到背景執行,
(Control.CheckForIllegalCrossThreadCalls = False)
3.動畫Form 設定迴圈內,每秒sleep執行續

可能不同的Form也是不同執行續,
不知道是不是變成說呼叫動畫Form要用背景去呼叫

================================

感覺會有thread問題

應該要弄成背景執行
好煩~不熟不太知道問題在哪裡

跨執行緒作業無效: 存取控制項 'Panel1' 時所使用的執行緒與建立控制項的執行緒不同。

因為背景執行,如果再背景執行會設定到呼叫背景執行續的前一執行續設值或是傳物件,
就會發生跨執行續的問題

從vs2005開始, 所有windows form控制項, 都多了一個[能否任意跨執行緒變更屬性]的靜態屬性
這是為了防止控制項在多執行緒情況下工作時, 同時有多個執行緒存取單一控制項, 導致程式發生死結
所以如果要跨執行緒存取控制項, 必須使用Control.Invoke的方法, 來變更控制項目前的屬性,
如果覺得這樣做太麻煩, 而且您自己確定, 不會發生死結

Control.CheckForIllegalCrossThreadCalls = False
就不會檢查了

======================================

VB.NET SLEEP寫法



目前可以載入圖片,

但是卻不是GIF動畫的格式
圖片不會動~

大致上想法~
1. gif 由許多圖檔組成
2. 先知道該gif有幾個圖檔
3. 然後透過Timer去切換每個圖檔,
4. 可能需要背景執行,
5. 設定結束條件,當忙碌結束就關掉這個Form



這樣圖片就動起來



取得Gif動畫圖檔內含的圖片


=============================================


目前最簡單的想法是透過一個Form,上面放一個PictureBox,

該Box去連要顯示的Gif

當系統執行某些動作的時候,會呼叫該Form,來顯示Loding忙碌中的動畫

1. Form想做成有透明度的(壓過系統上其他Form,無法執行其他動作)

2. 可能會需要多執行緒來配合動畫顯示與背後真正執行忙碌的動作
    同時進行,這就不太會了

=================================================

顯示執行中的動畫圖示




為控制項加上顯示載入動畫的機制



設定.NET透明表單


(Form)显示/播放Gif动画


PictureBox的設計應用-載入衛星雲圖

沒有留言:

張貼留言