Aquí está el mensaje de error que estoy recibiendo cuando intento abrir una OpenFileDialog en mi programa:STAThread falta, pero está ahí
"hilo actual se debe establecer en un solo departamento hilo (STA) antes de OLE se pueden realizar llamadas. Asegúrese de que su función principal tenga marcado STAThreadAttribute . Esta excepción es solo si se adjunta un depurador al proceso ".
El problema con este mensaje de error es que mi método Principal TIENE el atributo STAThread adjunto. No sé cómo manejar esto. ¿Cómo puedo agregar algo si ya está allí? Duplicarlo no es una buena opción, e intenté borrarlo, compilar la aplicación, agregarla y compilarla de nuevo sin éxito. Simplemente no entiendo.
private void btnOldFind_Click(object sender, EventArgs e)
{
openFileDialog1.Multiselect = false;
openFileDialog1.FileName = "";
openFileDialog1.ShowHelp = false;
openFileDialog1.AutoUpgradeEnabled = true;
openFileDialog1.InitialDirectory = @"C:\";
openFileDialog1.Filter = "Microsoft Installer (*.msi)|*.msi|All Files (*.*)|*.* ";
openFileDialog1.FilterIndex = 1;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBoxOldInstallation.Text = openFileDialog1.FileName;
}
}
y el método principal es:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
Y no roscado se realiza de forma explícita. Solo un programa bastante básico para ser honesto.
modo Edit2 ::
Aquí está el mensaje de error completo que incluye pila de llamadas
System.Threading.ThreadStateException fue controlada mensaje = "hilo actual se debe establecer en apartamento solo hilo (STA) antes de que se puedan realizar llamadas OLE. Asegúrese de que su función Principal tenga marcado STAThreadAttribute.Esta excepción solo se produce si se adjunta un depurador al proceso. " Fuente = "" System.Windows.Forms StackTrace: en System.Windows.Forms.FileDialog.RunDialog (IntPtr hWndOwner) en System.Windows.Forms.CommonDialog.ShowDialog (propietario IWin32Window) en System.Windows.Forms .CommonDialog.ShowDialog() en MSI_Comparison_GUI.Form1.btnOldFind_Click (Object Sender, EventArgs e) en c: \ tfs \ DocuWare .NET \ DocuWare NewGen \ src \ Tools \ MSI_Comparison \ MSI_Comparison_GUI \ Form1.cs: línea 70 en System .Windows.Forms.Control.OnClick (EventArgs e) en System.Windows.Forms.Button.OnClick (EventArgs e) en System.Windows.Forms.Button.OnMouseUp (MouseEventArgs mevent) en System.Windows.Forms. Control.WmMouseUp (Mensaje & m, MouseButto botón ns, Int32 hace clic) en System.Windows.Forms.Control.WndProc (Mensaje & m) en System.Windows.Forms.ButtonBase.WndProc (Mensaje & m) en System.Windows.Forms.Button.WndProc (Mensaje & m) en System.Windows.Forms.Control.ControlNativeWindow.OnMessage (Mensaje & m) en System.Windows.Forms.Control.ControlNativeWindow.WndProc (Mensaje & m) en System.Windows.Forms.NativeWindow. DebuggableCallback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) en System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW (MSG & msg) en System.Windows.Forms.Ap plication.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 dwComponentID, Int32 reason, Int32 pvLoopData) en System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner (razón Int32, contexto ApplicationContext) en System.Windows.Forms.Application.ThreadContext.RunMessageLoop (razón Int32, contexto ApplicationContext) en System.Windows.Forms.Application.Run (Form mainForm) en MSI_Comparison_GUI.Program.Main() en c: \ tfs \ DocuWare .NET \ DocuWare NewGen \ src \ Tools \ MSI_Comparison \ MSI_Comparison_GUI \ Program.cs: línea 18 en System.AppDomain._nExecuteAssembly (Assembly assembly, String [] args) en System.AppDomain .ExecuteAssembly (String assemblyFile, Evidencia assemblySecurity, String [] args) en Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() en System.Threading.ThreadHelper.ThreadStart_Context (estado Object) en System.Threading.ExecutionContext.Run (ExecutionContext executionContext, ContextCallback de devolución de llamada, el estado del objeto) en System.Threading.ThreadHelper.ThreadStart() InnerException:
¿Puede mostrarnos el código, cómo se crea el diálogo? ¿Y creaste otro hilo en tu programa? –
se ha agregado para su placer de lectura: P – Adkins
¿Está seguro de que se está ejecutando en el hilo principal en ese punto y que OpenFileDialog1 se ha creado en el hilo principal? –