2014-02-25 11 views
-1

我一直在嘗試執行寫在標題中的簡單任務。我只能想到使用定時器,線程睡眠或後臺工作,但我只會做一次這個任務..所以我想避免做一些功能或只是一次。我嘗試了線程睡眠,但它沒有顯示睡眠前的mainform ...有什麼建議嗎?Winform - 顯示mainform,等待,然後修改標籤

回答

1

Form.Load事件中使用:

private const int DelayMilliseconds = 500; 

private void Form1_Load(object sender, EventArgs e) 
{ 
    new System.Threading.Timer(_ => Invoke(new Action(() => _myLabel.Text = "bla")), 
           null, 
           DelayMilliseconds, 
           Timeout.Infinite); 
} 

由於您只指定延遲和無週期,所以定時器將只運行一次。但是,由於定時器回調是在不同的線程上執行的,因此需要在UI線程上修改標籤的動作爲Invoke

6

最簡單的方法是使用await Task.Delay:使用您正在使用的.NET版本

private async void Form_Load(object sender, EventArgs e) 
{ 
    await Task.Delay(timespan); 
    label1.Text = "Hello world"; 
} 

如果您沒有訪問await,那麼你最好的選擇將是使用Timer 。是的,這是相當一部分代碼。這僅僅反映了異步操作的複雜性。 await做了很多事情使這更簡單;沒有它,這不是一個適合簡潔解決方案的問題。

+0

使用定時器的一個例子請 –

+0

+1。如果.NET 4.5可用,這相當好,當然比我的答案好。 – alsed42

+0

我無法使用這個解決方案,可能是因爲我的.NET。我有框架4.太糟糕了不能標記更多的答案 – Vantalk

0

使用System.Timer實例

  • 作出事件處理程序與Timer.Elapsed
  • 設定定時器間隔
  • 計時器開始爲應用程序的火災高達 -after經過設置標籤 - 停止計時器計時器