2013-08-07 44 views
2

所以基本上我爲我的程序做了一個登錄系統,當用戶登錄它時,它打開了Form1。但我需要Form1作爲STA線程。 我在Form1中收到此錯誤:新窗體上的STAThread錯誤(SaveFileDialog)

{「當前線程必須設置爲單線程單元(STA)之前OLE調用可製成模式確保您的主要功能有請將STAThreadAttribute上標註此異常。如果一個調試器附加到進程,纔會引發。「} 在這段代碼

SaveFileDialog FSave = new SaveFileDialog() 
     { 
      Filter = "Executable Files|*.exe", 
      InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 
     }; 
     if (FSave.ShowDialog() == DialogResult.OK)//im getting the error here 
     { 
     // CodeDom compiler code 
     } 

這是我的Program.cs

using System; 
using System.Windows.Forms; 
namespace hwid_login_system 
{ 
    static class Program 
    { 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Login()); 
     } 
    } 
} 

這就是我在形式上登錄

private void complete() 
    { 
     if (loggedin && hwid) 
     { 
      MessageBox.Show("Logged in successfully!"); 
      System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc)); 
      t.Start(); 
      this.Close(); 
     } 
     else 
      MessageBox.Show("Something else went wrong..", "Failed", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
public static void ThreadProc() 
    { 
     Application.Run(new Form1()); 
    } 
+0

你是從另一個線程調用FSave.ShowDialog()嗎? – tHand

+0

如何更新我的形式登錄 – NaniDev

+1

打開Form只是anwsere我自己的問題:d 接着說:t.SetApartmentState(ApartmentState.STA);'運行它作爲一個STA線程 – NaniDev

回答

0

打開窗體Form1如果你是從你的第二個線程中調用FSave.ShowDialog(),您將收到此錯誤。您應該始終在您的主應用程序線程中打開您的Windows窗體。

考慮調用委託來顯示對話,而不是直接打開表單。