用SaveFileDialog无法浏览我的电脑?显示空白 一段很正常的代码:SaveFileDialog sfd = new SaveFileDialog();sfd.Filter = "Excel文件 (*.xls)|*.xls|所有文件 (*.*)|*.*";sfd.FileName = "";sfd.ShowDialog(this) ......运行出来的程序结果让我非常诧异,居然浏览“我的电脑”一片空白,什么盘符、文件夹……一切都看不见。 如果有谁见过这样的情况,麻烦帮满解释一下。在什么情况下会出现这种故障? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我想是这个参数的原因吧。sfd.Filter你好好找找资料,看看人家是怎么写的。 真没遇到过,你换个OpenFileDialog试试 和Filter没关系,有可能是系统权限问题...只是可能,因为就算是guest也能访问桌面的...换个用户或换台计算机测试一下... 应该是FILTER的问题,你先弄个open试试 问题已经解决,不过始终不能断定根本原因,我刚接触.net不久,还望高手指点:目前在做一个导入导出Excel报表的应用程序,使用多线程进行导入导出操作,上述问题的原因是新建执行线程的时候,没有设定线程的ApartmentState为STA,导致线程不是示例代码(错误): Thread tThread; private void openFile() { try { SaveFileDialog sfd = new SaveFileDialog(); sfd.ShowDialog(); } catch (ThreadAbortException ex) { Thread.ResetAbort(); } } private void button3_Click(object sender, EventArgs e) { if (tThread != null) { if (tThread.IsAlive == true) { tThread.Abort(); tThread.Join(2000); tThread = new Thread(new ThreadStart(openFile)); tThread.SetApartmentState(ApartmentState.STA); tThread.Start(); } else { tThread = new Thread(new ThreadStart(openFile)); tThread.SetApartmentState(ApartmentState.STA); tThread.Start(); } } else { tThread = new Thread(new ThreadStart(openFile)); // tSTAThread.SetApartmentState(ApartmentState.STA); // 第一次执行,复现问题。 tThread.Start(); } }MSDN说:“单元是进程内部具有相同线程访问要求的对象的逻辑容器。同一单元中的所有对象都可以接收从该单元中的任何线程发出的调用。.NET Framework 不使用单元,托管对象自己负责以线程安全的方式使用所有共享资源。由于 COM 类使用单元,因此公共语言运行库需要在 COM interop 的情况下调用 COM 对象时创建并初始化一个单元。托管线程可以创建并进入只允许有一个线程的单线程单元 (STA) 或者包含一个或多个线程的多线程单元 (MTA)。通过将线程的 ApartmentState 属性设置为 ApartmentState 枚举值之一,可以控制所创建的单元的类型。由于给定线程只能初始化 COM 单元一次,因此在第一次调用非托管代码之后就不能更改单元类型。”疑问:新建线程默认为MTA,但是没有道理在调用System.Windows.Forms中的SaveFileDialog会出现“我的电脑”空白啊? 播放音乐! 如何后台加载数据库表到Dataset中 enterprise library 能不能操作oracle 请问我现在正在学JAVA和C#哪各更有前途? XML TO DataSet 问题,江湖告急 急!!!!!请高手帮忙!没分了,很不好意思!以后补给!!!!!!! 怎样通过浏览将文件放入数据库并保存文件名 c#中为何引用是安全的,而以前C中的指针是不安全的?? ====>白痴问题:关于利用DataSet读写局域网内XML文件的问题? Oracle VM 虚拟机 SQL 2008 数据库连接问题 Socket.Connect 请问这种xml要怎么取数据
sfd.Filter你好好找找资料,看看人家是怎么写的。
{
try
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.ShowDialog();
}
catch (ThreadAbortException ex)
{
Thread.ResetAbort();
}
} private void button3_Click(object sender, EventArgs e)
{
if (tThread != null)
{
if (tThread.IsAlive == true)
{
tThread.Abort();
tThread.Join(2000); tThread = new Thread(new ThreadStart(openFile));
tThread.SetApartmentState(ApartmentState.STA);
tThread.Start();
}
else
{
tThread = new Thread(new ThreadStart(openFile));
tThread.SetApartmentState(ApartmentState.STA);
tThread.Start();
}
}
else
{
tThread = new Thread(new ThreadStart(openFile));
// tSTAThread.SetApartmentState(ApartmentState.STA); // 第一次执行,复现问题。
tThread.Start();
}
}MSDN说:
“
单元是进程内部具有相同线程访问要求的对象的逻辑容器。同一单元中的所有对象都可以接收从该单元中的任何线程发出的调用。.NET Framework 不使用单元,托管对象自己负责以线程安全的方式使用所有共享资源。由于 COM 类使用单元,因此公共语言运行库需要在 COM interop 的情况下调用 COM 对象时创建并初始化一个单元。托管线程可以创建并进入只允许有一个线程的单线程单元 (STA) 或者包含一个或多个线程的多线程单元 (MTA)。通过将线程的 ApartmentState 属性设置为 ApartmentState 枚举值之一,可以控制所创建的单元的类型。由于给定线程只能初始化 COM 单元一次,因此在第一次调用非托管代码之后就不能更改单元类型。”
疑问:新建线程默认为MTA,但是没有道理在调用System.Windows.Forms中的SaveFileDialog会出现“我的电脑”空白啊?