OpenFileDialog

0

Witam ponownie...

Jak użyć OpenFileDialog w innej formie niż główna. W tym przypadku to Form2 jest główną a Form1 to ta gdzie muszę użyć OpenFileDialog.

Czytałem w google.com że powinno się użyć

System.Threading.SetApartmentState(ApartmentState.STA);

Lecz to dla mnie nie działa więc pytam się was jak to mogę zrobić...

Jak używam

dialog.ShowDialog();

to mi wyświetla się ten błąd:

Current thread must be set to single thread apartment (STA) mode before OLE calls can be made. Ensure that your Main function has STAThreadAttribute marked on it. This exception is only raised if a debugger is attached to the process.

Z góry dzięki za odpowiedź.

P.S. Nad Main mam [STAThread] i jak otowrzę bez debugowania ctrl + F5 to mi dobrze chodzi ale nie wiem czy to ma znaczenie.

0

main mainem, ale czy to okno-drugie jest tworzone przez jakis watek poboczny Twojej aplikacji, czy przez glowny? otwierasz je przez showdialog czy show?

0
 public static void ThreadProc()
        {
            Application.Run(new Form1());
        }

private void OpenForm1(object sender, EventArgs e)
        {
            
            System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
            t.Start();
        }
0

klania sie troche czytanie ze zrozumieniem, chyba ze angielskiego nie znasz..
http://msdn.microsoft.com/en-us/library/system.threading.thread.setapartmentstate.aspx

KAŻDY wątek ktory chce używac OFN musi miec ApartmentState.STA ustawione. Jesli tym watkiem jest "ten-od-Main", to na Main() musisz polozyc atrybut [STAThread]. Innym watkom zas po prostu ustawiasz to przez podana przez Ciebie metode

public static void ThreadProc()
{
    Application.Run(new Form1());
}

private void OpenForm1(object sender, EventArgs e)
{
    System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
    t.SetApartmentState(ApartmentState.STA);
    t.Start();
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1