2014-02-24 94 views
0

我有一個Windows Forms應用程序,在我的應用程序加載文件到一個列表框,有時這個可能需要幾秒鐘,所以在這個時候我想顯示「紡車」和我發現這個Gif:http://www.ajaxload.info/ 是否有可能將它添加到我的應用程序,而我的應用程序忙於控制器?顯示「紡車」在我Windows窗體應用程序

+2

請不要用GIF。讓系統爲你做這個。 –

+0

我不能使用Cursor.Current = Cursors.WaitCursor,只有System.Windows.Forms.DataVisualization.Charting.Cursor – user3271698

+0

您可以使用BackgroundWorker的,如果你想使用一個更新進度/圖像。 – Tan

回答

1

從一個項目中發現了一些舊代碼。 編輯了一些東西,你應該能夠很容易地工作。

調用它:

GuiCursor.WaitCursor(() => { yourclass.DoSomething(); }); 

internal class GuiCursor 
{ 

    private static GuiCursor instance = new GuiCursor(); 

    private GuiCursor() { } 
    static GuiCursor() { } 

    internal static void WaitCursor(MethodInvoker oper) 
    { 
     if (Form.ActiveForm != null && !Thread.CurrentThread.IsBackground) 
     { 
      Form myform = Form.ActiveForm; 
      myform.Cursor = Cursors.WaitCursor; 

      try 
      { 
       oper(); 
      } 
      finally 
      { 
       myform.Cursor = Cursors.Default; 
      } 
     } 
     else 
     { 
      oper(); 
     } 
    } 

    internal static void ToggleWaitCursor(Form form, bool wait) 
    { 
     if (form != null) 
     { 
      if (form.InvokeRequired) 
      { 
       form.Invoke(new MethodInvoker(() => { form.Cursor = wait? Cursors.WaitCursor : Cursors.Default; })); 
      } 
      else 
      { 
       form.Cursor = wait ? Cursors.WaitCursor : Cursors.Default; 
      } 
     } 
    } 

    internal static void Run(Form form) 
    { 
     try 
     { 
      Application.Run(form); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 
} 

如由請求,一個例子。創建一個新的winform項目來測試它。 默認情況下你會得到一個Form1。向它添加一個按鈕,雙擊它,讓你得到一個自動生成的方法。

這種替換Form1類。

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      GuiCursor.WaitCursor(() => { DoSomething(); }); 
     } 

     private void DoSomething() 
     { 
      Thread.Sleep(3000); 
     } 
    } 



    internal class GuiCursor 
    { 

     private static GuiCursor instance = new GuiCursor(); 

     private GuiCursor() { } 
     static GuiCursor() { } 

     internal static void WaitCursor(MethodInvoker oper) 
     { 
      if (Form.ActiveForm != null && !Thread.CurrentThread.IsBackground) 
      { 
       Form myform = Form.ActiveForm; 
       myform.Cursor = Cursors.WaitCursor; 

       try 
       { 
        oper(); 
       } 
       finally 
       { 
        myform.Cursor = Cursors.Default; 
       } 
      } 
      else 
      { 
       oper(); 
      } 
     } 

     internal static void ToggleWaitCursor(Form form, bool wait) 
     { 
      if (form != null) 
      { 
       if (form.InvokeRequired) 
       { 
        form.Invoke(new MethodInvoker(() => { form.Cursor = wait ? Cursors.WaitCursor : Cursors.Default; })); 
       } 
       else 
       { 
        form.Cursor = wait ? Cursors.WaitCursor : Cursors.Default; 
       } 
      } 
     } 

     internal static void Run(Form form) 
     { 
      try 
      { 
       Application.Run(form); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 
    } 
+0

我把它作爲新課程在我的項目和變量isWaitCursor不承認 – user3271698

+0

改變它等待 – Johan

+0

我把它放在我的應用程序繁忙和沒有發生的地方 – user3271698

1

一個小技巧要做到這一點可能是它使用PictureBox與圖像。點擊按鈕後,使PictureBox可見並在點擊操作完成後再次隱藏。

+0

我可以使用上面的鏈接,看看這個圈子紡紗? – user3271698

+0

保存該GIF文件並將其放入您的項目中。將此圖像用於PictureBox。 – danish