1. 程式人生 > >C# winform 等待窗體

C# winform 等待窗體

考慮到客戶端的使用者體驗,在一些耗時的功能上借鑑了web的體驗。新增一個等待窗體功能。自己搗鼓了半天,簡單弄了一點東西。為了更加靈活性,在建構函式裡新增Form型別的引數。也就是說,窗體可以自定義新增。以下是程式碼,請大夥看看有沒有什麼問題:

</pre><pre code_snippet_id="428407" snippet_file_name="blog_20140717_2_9457378" name="code" class="csharp">using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace ThreadWaiting
{

  public  class WaitingThread
  {
      #region private fields
      private Thread _thrd;
      private Form _waitFrm;
      #endregion

      private string _error;
      /// <summary>
      ///  錯誤資訊
      /// </summary>
      public string Error
      {
          get { return _error; }
          set { _error = value; }
      }

      Action<object> _doEvent;
      public Action<object> DoEvent
      {
          get { return _doEvent; }
          set { _doEvent = value; }
      }

      public WaitingThread (Form waitform)
      {
          _thrd = new Thread(new ParameterizedThreadStart(StartDo));
          _waitFrm = waitform;
      }

      /// <summary>
      /// 執行緒需要工作內容
      /// </summary>
      /// <param name="para"></param>
      private void StartDo(object para)
      { 
          _doEvent(para);      

          //直到建立控制代碼
          while (!_waitFrm.IsHandleCreated)
          {
              
          }

          _waitFrm.BeginInvoke(new MethodInvoker(delegate()
          {
              _waitFrm.Close();
              _waitFrm.Dispose();
          }));

      }

      /// <summary>
      /// 啟動waitThre工作
      /// </summary>
      /// <param name="para"></param>
      public void ThreadStart(object para)
      {
          try
          {
              _thrd.Start(para);
          }
          catch (Exception e)
          {
              _error = e.Message;             
          }

           if (!_waitFrm.IsDisposed)
          {
              _waitFrm.ShowDialog();
          }
      }
    }
}

功能比較簡單,測試也沒有發現問題。但自己感覺好像哪裡有點問題,希望有人願意指出來。