- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我尝试在我的程序中打开 OpenFileDialog 时收到的错误消息:
"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."
此错误消息的问题在于我的 Main 方法确实附加了 STAThread 属性。我不知道如何处理这个问题。如果它已经存在,我该如何添加。将它加倍不是一个好的选择,我尝试删除它、构建应用程序、添加它并再次构建它但没有成功。我就是不明白。
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;
}
}
主要方法是:
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());
}
}
并且没有显式执行线程。老实说,这只是一个非常基本的程序。
编辑2::
这里是完整的错误信息,包括调用栈
System.Threading.ThreadStateException was unhandled Message="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." Source="System.Windows.Forms" StackTrace: at System.Windows.Forms.FileDialog.RunDialog(IntPtr hWndOwner) at System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner) at System.Windows.Forms.CommonDialog.ShowDialog() at MSI_Comparison_GUI.Form1.btnOldFind_Click(Object sender, EventArgs e) in c:\tfs\DocuWare .NET\DocuWare NewGen\src\Tools\MSI_Comparison\MSI_Comparison_GUI\Form1.cs:line 70 at System.Windows.Forms.Control.OnClick(EventArgs e) at System.Windows.Forms.Button.OnClick(EventArgs e) at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent) at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks) at System.Windows.Forms.Control.WndProc(Message& m) at System.Windows.Forms.ButtonBase.WndProc(Message& m) at System.Windows.Forms.Button.WndProc(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData) at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) at System.Windows.Forms.Application.Run(Form mainForm) at MSI_Comparison_GUI.Program.Main() in c:\tfs\DocuWare .NET\DocuWare NewGen\src\Tools\MSI_Comparison\MSI_Comparison_GUI\Program.cs:line 18 at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException:
最佳答案
这可能是您在 Connect1 上报告的以下问题:
根据该问题,当您同时拥有 myprogram.exe 和 myprogram 时,Visual Studio 的托管进程即 myprogram.vshost.exe 会强制执行错误的单元状态.dll 文件在您的输出文件夹中。
这个问题可能特定于某些旧版本的 Visual Studio (2005),我无法使用 VS 2010 重现它。
明显的解决方法是更改 dll 的名称或将 dll 移动到另一个文件夹。
出现这种情况可能是因为您将项目的输出类型从类库更改为 Windows 应用程序。
1目前不清楚这个问题是否得到了微软的确认,只是说这个问题不在VS产品团队的责任范围内。
关于c# - STAThread 不见了,但它在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3584434/
我正在编写一个 WPF 应用程序,该应用程序对具有简单要求的 API 具有可选依赖项;它必须在没有 STAThread 属性的线程上初始化/使用。当然,WPF 需要 STA,这样一切就变得简单了。 在
最近,当我尝试在 WinForm 中启动 OpenFileDialog 时,我的程序中遇到了与 STA 相关的错误。我已经阅读了一些内容,在将 [STAThread] 属性添加到主线程之前,我想知道它
我为 AutoCAD 编写了托管扩展。当 AutoCAD 加载扩展时,它会启动一些 IExtensionApplication.Initialize() 方法。我需要在应用程序的主 Thread 中启
摘自关于 STAThread 的 MSDN 文章: Indicates that the COM threading model for an application is single-thread
我正在学习 C# 3.5,我想知道 [STAThread] 在我们的程序中做了什么? 最佳答案 STAThreadAttribute 本质上是 Windows 消息泵与 COM 组件通信的要求。虽然核
我不完全理解 STATHREAD 属性的作用 http://msdn.microsoft.com/en-us/library/system.stathreadattribute.aspx .请看下面的
与奇怪的行为...... 大家好! 谁能解释一下,怎么会这样? 谢谢,亚历克斯。 最佳答案 我仍然觉得链接的答案有点难以接受,特别是因为 OP 承认他实际上没有有一个与 EXE 同名的 DLL。我也无
这是我尝试在我的程序中打开 OpenFileDialog 时收到的错误消息: "Current thread must be set to single thread apartment (STA)
我有一个外部组件 (C++),我想从我的 C# 代码中调用它。 代码是这样的: using System.Text; using System.Threading; using System.Thre
在 Watin 的 source code ,有这段代码: public void NavigateToNoWait(Uri url) { var thread = n
我想测试一个使用剪贴板 (WindowsForms) 的应用程序,我的单元测试中也需要剪贴板。为了使用它,它应该在 STA 模式下运行,但是由于 NUnit TestFixture 没有 main 方
基本上我已经为我的程序制作了一个登录系统,当用户登录时,它会打开 Form1。但我需要 Form1 成为 STA 线程。我在 Form1 中收到此错误: {"Current thread must b
我已经为 C# 控制台应用程序编写了代码。它将剪贴板中的值复制到文件中,并且运行时没有任何错误。 现在我想在另一个带有其他代码的 C# 项目中使用它。 我在 class{} 之后使用 [STAThre
当我们在 Main 中使用 STAThread 时,是否意味着我们不能从 Main 创建新线程? 最佳答案 不,它没有。大多数 UI 应用程序在 STA 线程中启动 - 它不会阻止它们启动新线程。 S
当您使用 Visual Studio 创建一个空的 WinForms 应用程序时,该模板在主应用程序类中具有 STAThread 属性。 我一直在阅读一些关于它的文档,但我不确定我是否完全理解它。 我
我对 C# 还是有点陌生,尤其是 C# 中的线程。我正在尝试启动一个需要单线程单元的函数 (STAThread) 但我无法编译以下代码: 该函数在名为 MyClass 的单独类中如下所示: int
当您使用 Visual Studio 创建一个空的 WinForms 应用程序时,该模板在主应用程序类中具有 STAThread 属性。 我一直在阅读一些关于它的文档,但我不确定我是否完全理解它。 我
我的代码有问题。我想这很简单,但我缺乏 OOP 和 C# 方面的经验,所以我不得不问你。 我的代码是这样的: namespace RR { static class Program {
我是 WPF 的新手,有几个关于 WPF 和 Windows 窗体集成的问题。 我有一个现有的 Visual C# Windows 窗体应用程序。我想将它与 WPF 窗口集成,单击按钮即可显示。这是不
我是 WPF 的新手,在我读过的每个教程中,他们都有一个 [System.STAThread]应用于其 Main 的属性方法,或者他们告诉读者这样做。 这个属性真的是“必需的”吗?如果是这样,为什么?
我是一名优秀的程序员,十分优秀!