2017-05-25 104 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