2017-05-25 79 views
0

我試圖展示我的窗體,然後加載我的數據(有點慢)。 即使僅在onShown方法上調用我的加載數據方法,我的屏幕仍保持白色,直到加載所有數據。 enter image description here.NET Windows窗體事件序列

然後我把:

Thread.Sleep(100000) 

在我onShown()方法,可以注意到,當onShown觸發我的控件不加載(可見)。

是否有任何事件僅在所有表單控件加載並可見時才引發?

Tksss ...

回答

0

請勿使用線程。它會凍結你的窗戶。

解決這些類型的延遲負荷的最佳方法是使用 System.Windows.Threading.DispatcherTimer

循序漸進:

第一步:

首先添加引用WindowsBase DLL到您的項目。

右鍵單擊項目 - >添加引用。在.Net選項卡上選擇WindowsBase並添加。

第二步:

在表單代碼導入Imports System.Windows.threading

第三步:

DispatcherTimer

Private dispatcherTimer As System.Windows.Threading.DispatcherTimer 
創建形式的私人對象

步驟4:

在形式 「Onshown」 事件創建DispatcherTimer對象並設定爲2秒(實施例)的時間間隔。

Private Sub Form1_Shown(sender As System.Object, e As System.EventArgs) Handles MyBase.Shown 
     'CREATE DISPATCHER OBJECT 
     dispatcherTimer = New System.Windows.Threading.DispatcherTimer() 

     'ADD THE METHOD TO BE HANDLED AFTER SPECIFIED INTERVAL 
     AddHandler dispatcherTimer.Tick, AddressOf dispatcherTimer_Tick 

     'SET YOUR INTERVAL (set 2 sec for example) 
     dispatcherTimer.Interval = New TimeSpan(0, 0, 2) 

     'START THE TIMER. 
     dispatcherTimer.Start() 
    End Sub 

而在方法dispatcherTimer_Tick加載表單控件(處理程序在上述方法中添加的)

Public Sub dispatcherTimer_Tick() 
      Try 
       TextBox1.Text = "example" 
       TextBox2.Text = "example" 
       TextBox3.Text = "example" 
       TextBox4.Text = "example" 

       'CALL STOP TO THE TIMER SO THAT THE "dispatcherTimer_Tick" WONT GET CALLED REPEATEDLY. 
       dispatcherTimer.Stop() 
      Catch ex As Exception 

      End Try 

     End Sub