2013-03-22 53 views
0

問題是,我有某種啓動畫面顯示加載動畫。 我有特別的經理,顯示和隱藏它。模式形式不能恢復後最小化2 UI線程

class Manager 
{ 
    private Form CurForm; 
    Thread curt; 

    private Manager() 
    { 
     curt= new Thread(start); 
     curt.ApartmentState = ApartmentState.STA; 
     curt.IsBackground = true; 
     curt.Start(); 
    } 

    void start() 
    { 
     CurForm = new Animation(); 
     Application.Run(CurForm); 
    } 


    public static readonly Manager Active = new Manager(); 

    public static void Show() 
    { 
     if (Active.CurForm != null) 
     { 
      Active.CurForm.Invoke(new Action(() => { Active.CurForm.Show(); })); 
     } 
    } 

    public static void Hide() 
    { 
     if (Active.CurForm != null) 
     { 
      Active.CurForm.Invoke(new Action(() => { Active.CurForm.Hide(); })); 
     } 
    } 
} 

我打開一些模式窗體(ShowDialog)。此模式窗體不顯示在任務欄中。

我很容易就可以將它最小化,並在任務欄上的主窗體上單擊後,它將顯示頂部的模態窗體。

但是,當我加載所有必要的數據時顯示此加載動畫。

某種類似的(當然,這只是一個樣本,以測試它的工作,並在實際應用它tooks太多的時間來加載所有數據,並有很多的控制形成)

public modal() 
    { 
     Manager.Show(); 
     InitializeComponent(); 
     Thread.Sleep(5000); 
     Manager.Hide(); 
    } 

當我試圖最小化和恢復它,就像我上面所說的那樣,它不會恢復我的模態形式,只是顯示我的主要不可用的形式。更重要的是它在某些情況下起作用,但在某些情況下不起作用。

有人知道它爲什麼會發生或如何解決它?

+0

您的** curt **線程不會執行任何操作嗎?這一切都在主線程上運行? – Belogix 2013-03-22 11:38:29

+0

curt它是啓動畫面線程。我需要創建一些獨立的線程來爲我的閃屏設置動畫。 – aleshko 2013-03-22 11:42:01

回答

0

這很奇怪,但是當我像這樣修改時,一切似乎都正常。

我只是殺死單獨的UI線程。

public class MyApplicationContext:ApplicationContext 
{ 
    public Form CurForm; 

    ManualResetEvent ready = new ManualResetEvent(false); 

    public MyApplicationContext() 
    { 
     CurForm=new Animation(); 
     CurForm.Show(); 
    } 
} 

class Manager 
{ 
    private MyApplicationContext CurContext; 

    Thread curt; 


    void start() 
    { 
     try 
     { 
      CurContext = new MyApplicationContext(); 
      Application.Run(CurContext); 
     } 
     catch 
     { 
      CurContext.CurForm.Close(); 
     } 
    } 

    private void Init() 
    { 
     curt = new Thread(start); 
     curt.SetApartmentState(ApartmentState.STA); 
     curt.IsBackground = true; 
     curt.Start(); 
    } 

    public static Manager Active 
    { 
     get 
     { 
      if (active == null) 
      { 
       active = new Manager(); 

      } 
      return active; 
     } 
    } 

    private static Manager active; 

    public static void Show() 
    { 
     Active.Init();   
    } 

    public static void Hide() 
    { 
     Active.curt.Abort();       
    } 
相關問題