public class Invoker { public OpenFileDialog InvokeDialog; private Thread InvokeThread; private DialogResult InvokeResult; public Invoker() { InvokeDialog = new OpenFileDialog(); InvokeThread = new Thread(new ThreadStart(InvokeMethod)); InvokeThread.SetApartmentState(ApartmentState.STA); InvokeResult = DialogResult.None; } public DialogResult Invoke() { InvokeThread.Start(); InvokeThread.Join(); return InvokeResult; } private void InvokeMethod() { InvokeResult = InvokeDialog.ShowDialog(); } }