2015-08-18 31 views
1

試圖創建一個線程,該線程將修改從該類生成的窗口。它也將啓動超活動指標。但是當我運行這個代碼時,它會修改窗口,但不會添加超級活動監視器,並且只會有一個白色矩形放置在其中。線程進度條未添加到表格

public void refreshNotification() 
{ 
    Thread backgroundThread = new Thread(
     new ThreadStart(() => 
     { 
      window.Size = new System.Drawing.Size(330, 100); 
      window.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
      window.TransparencyKey = System.Drawing.Color.Turquoise; 
      window.BackColor = System.Drawing.Color.Gainsboro; 
      window.MouseDown += window_MouseDown; 
      window.MouseMove += window_MouseMove; 
      window.MouseUp += window_MouseUp; 
      UltraActivityIndicator Indicator = customiseActivityIndicator(); 
      window.Controls.Add(Indicator); 
      window.Show(); 
      while (done == false) 
      { 
       Thread.Sleep(10); 
       //do nothing 
      } 
      Indicator.Stop(); 
     } 
    )); 
    backgroundThread.Start(); 
} 

private static UltraActivityIndicator customiseActivityIndicator() 
{ 
    UltraActivityIndicator Indicator = new UltraActivityIndicator(); 
    Indicator.Start(); 
    Indicator.Location = new System.Drawing.Point(50, 35); 
    Indicator.Size = new System.Drawing.Size(230, 25); 
    Indicator.MarqueeAnimationStyle =    Infragistics.Win.UltraActivityIndicator.MarqueeAnimationStyle.BounceBack; 
    Indicator.AnimationSpeed = (25); 
    Infragistics.Win.Appearance appearance12 = new Infragistics.Win.Appearance(); 
    appearance12.BackColor = System.Drawing.Color.CornflowerBlue; 
    Indicator.MarqueeFillAppearance = appearance12; 

    return Indicator; 
} 

回答

0

您在單獨Thread後創建的窗口,你把正是Thread成無限制Sleep與此代碼:

while (done == false) 
{ 
    Thread.Sleep(10); 
    //do nothing 
} 

這就是爲什麼你的窗口是白色的 - 這是從Windows忙觀點看法。

我建議你在UI Thread上創建你的窗口,並使用BeginInvoke來調整大小和指示邏輯。