首页 新闻 会员 周边

ASP.NET(C#) 浏览文件夹对话框的激活

0
悬赏园豆:20 [待解决问题]

源代码如下:

 1         FolderBrowserDialog folderBrowserDialog;
 2         OpenFileDialog openFileDialog;
 3         private DialogResult dialogResult;
 4         private Thread invokeThread;
 5         private void invokeMethod()
 6         {
 7              dialogResult = folderBrowserDialog.ShowDialog();
 8         }
 9         private void invokeMethod1()
10         {
11             dialogResult = openFileDialog.ShowDialog();
12         }
13 
14         /// <summary>
15         /// 浏览选择文件夹
16         /// </summary>
17         /// <param name="sender"></param>
18         /// <param name="e"></param>
19         protected void Button2_Click(object sender, EventArgs e)
20         {
21             string filePath = ""; //选择文件夹的路径及文件夹名
22             folderBrowserDialog = new FolderBrowserDialog();
23             folderBrowserDialog.Description = "选择文件夹"; //显示说明文本
24             
25             invokeThread = new Thread(new ThreadStart(invokeMethod));
26             invokeThread.SetApartmentState(ApartmentState.STA);
27             invokeThread.Start();
28             invokeThread.Join();
29             
30             if (dialogResult == DialogResult.OK)
31             {
32                 filePath = folderBrowserDialog.SelectedPath.ToString().Trim();
33                 
34 } 35 } 36 /// <summary> 37 /// 浏览选择文件 38 /// </summary> 39 /// <param name="sender"></param> 40 /// <param name="e"></param> 41 protected void Button3_Click1(object sender, EventArgs e) 42 { 43 string filePath = ""; //选择文件夹的路径及文件夹名 44 openFileDialog = new OpenFileDialog(); 45 openFileDialog.Title = "选择文件"; //显示说明文本 46 openFileDialog.Filter = "(img文件)*.img|*.img|(tif文件)*.tif|*.tif"; 47 48 invokeThread = new Thread(new ThreadStart(invokeMethod1)); 49 invokeThread.SetApartmentState(ApartmentState.STA); 50 invokeThread.Start(); 51 invokeThread.Join(); 52 53 if (dialogResult == DialogResult.OK) 54 { 55 filePath = openFileDialog.FileName.ToString().Trim(); 56
57 } 58 }

如果不用线程的方法,直接调用ShowDialog时,即如下代码:

 1         protected void Button3_Click1(object sender, EventArgs e)
 2         {
 3             string filePath = ""; //选择文件夹的路径及文件夹名
 4             openFileDialog = new OpenFileDialog();
 5             openFileDialog.Title = "选择文件"; //显示说明文本
 6             openFileDialog.Filter = "(img文件)*.img|*.img|(tif文件)*.tif|*.tif";
 7 
 8             if (openFileDialog.ShowDialog() == DialogResult.OK)
 9             {
10                 filePath = openFileDialog.FileName.ToString().Trim();
11                 
12 } 13 }

就会提示如下错误:

所以采用了线程的方法,但是测试发现:

点击浏览文件夹或者浏览文件的按钮后,点击浏览文件的按钮还好,大部分的时候浏览文件对话框会在浏览器的前面显示,但是浏览文件夹对话框就不行了,总是显示在浏览器的后面,无法在浏览器前面显示,请教高手,如何激活浏览文件夹对话框使其在浏览器前面显示?

zhzhx0318的主页 zhzhx0318 | 初学一级 | 园豆:182
提问于:2013-05-18 22:59
< >
分享
所有回答(2)
0

因为你跨线程访问 FolderBrowserDialog 控件了。我看你invokeMethod()方法没做什么耗时的操作,需要新建线程调用吗?

 

如果你实在要这样做的话,你就像这样:

private void invokeMethod()
{
    if(this.isRequired)
    {
          this.invoke(()=>{dialogResult = folderBrowserDialog.ShowDialog();})
     }
     else
     {
           dialogResult = folderBrowserDialog.ShowDialog();
      }
}
滴答的雨 | 园豆:3660 (老鸟四级) | 2013-05-19 23:54

您好,感谢您的回答,但是按照您的方法测试了一下,没有成功,错误提示:

然后我又把问题修改了一下,请大侠过目,小弟初学ASP.NET,还请大侠多多指教··

支持(0) 反对(0) zhzhx0318 | 园豆:182 (初学一级) | 2013-05-20 20:27

@zhzhx0318: 

奥,我回答的是Winform下这样处理。。。。ASP.NET处于安全考虑不支持这些对话框吧,你可以使用那个js看看:http://blog.csdn.net/huangwenhua5000/article/details/8233480

或者asp.net 的控件FileUpload

支持(0) 反对(0) 滴答的雨 | 园豆:3660 (老鸟四级) | 2013-05-20 21:15
0

加上STAThreadAttribute标记看看

程序诗人 | 园豆:313 (菜鸟二级) | 2013-06-04 15:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册