[解决]打开OpenFileDialog时出现问题 [英] [Solved] Problem while opening OpenFileDialog

查看:334
本文介绍了[解决]打开OpenFileDialog时出现问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,



在我的应用程序中,当我尝试打开OpenFileDialog时,我收到错误消息:

在进行OLE调用之前,必须将当前线程设置为单线程单元(STA)模式。确保您的Main函数上标记了STAThreadAttribute。仅当调试器附加到进程时才会引发此异常。



我为我的主函数添加了[STAThread]属性,但我仍然收到此错误。



在我的主要内容中表格,我打开另一个表格作为ShowDialog()并在那个表格内我试图调用OpenFileDialog(),这是不允许的?



请告诉我我的意思我做错了。



谢谢,

Nagendra。

Hello,

In my application, when i am trying to open a OpenFileDialog, i am getting an error as:
"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".

I did added [STAThread] attribute to my main function but still i am getting this error.

In my main form, i am opening another form as ShowDialog() and inside that form i am trying to call OpenFileDialog(), is this not allowed?

Please tell me what i am doing wrong.

Thanks,
Nagendra.

推荐答案

你好,



在MSDN上看到这个线程,显示了几种可能的解决方案。看看其中一个是否对你有帮助。



http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/2411f889-8e30-4a6d-9e28-8a46e66c0fdb/ [ ^ ]


公共类Invoker

{

public CommonDialog InvokeDialog;

private Thread InvokeThread;

private DialogResult InvokeResult;



public Invoker(CommonDialog对话框)

{

InvokeDialog = dialog;

InvokeThread = new Thread(new ThreadStart(InvokeMethod));

InvokeThread.SetApartmentState(ApartmentState.STA);

InvokeResult = DialogResult.None;

}



public DialogResult Invoke()

{

InvokeThread.Start();

InvokeThread.Join();

返回InvokeResult;

}



private void InvokeMethod()

{

InvokeResult = InvokeDialog.ShowDialog();



}

}





使用



SaveFileDialog dlg = new SaveFileDialog();

if(DialogResult.OK ==(new Invoker(dlg).Invoke())){/ * handle result * /;}
public class Invoker
{
public CommonDialog InvokeDialog;
private Thread InvokeThread;
private DialogResult InvokeResult;

public Invoker(CommonDialog dialog)
{
InvokeDialog = dialog;
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();

}
}


Usage

SaveFileDialog dlg = new SaveFileDialog();
if (DialogResult.OK == (new Invoker(dlg).Invoke())) { /*handle result*/ ;}


这篇关于[解决]打开OpenFileDialog时出现问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆