多个STA(单线程公寓)在asp.net Web应用程序中不起作用

时间:2015-01-14 07:58:02

标签: c# asp.net

我创建了一个简单的asp.net Web应用程序。它有两个按钮,一个用于浏览文件夹(selectFolderbtn)&另一个用于浏览文件(selectFilebtn)。两个按钮的点击事件如下: -

protected void selectFolderbtn_Click(object sender, EventArgs e)
 {
     Thread thdSyncRead = new Thread(new ThreadStart(openfolder));
     thdSyncRead.SetApartmentState(ApartmentState.STA);
     thdSyncRead.Start();
 }

 public void openfolder()
 {

     FolderBrowserDialog fbd = new FolderBrowserDialog();
     DialogResult result = fbd.ShowDialog();

     string selectedfolder = fbd.SelectedPath;
     txt_extDestLoc.Text = selectedfolder;


 }


protected void selectFilebtn_Click(object sender, EventArgs e)
 {
     Thread thdSyncReadNew = new Thread(new ThreadStart(selectfile));
     thdSyncReadNew.SetApartmentState(ApartmentState.STA);
     thdSyncReadNew.Start();



 }

public void selectfile()
 {

     OpenFileDialog fileD = new OpenFileDialog(); //create object
     fileD.Filter = "Iso files|*.iso;"; //define filter
     fileD.ShowDialog(); //show dialog
     string globalisopath = fileD.FileName;

 }

我面临的问题是,在上述两个按钮点击事件中,只有一个事件一次有效。不是这两件事。我希望点击事件都能正常工作,应该选择一个文件夹&另一个应该选择一个文件。但它不按我想要的方式工作。

为什么会这样。请建议我的解决方案或任何其他替代方案。

1 个答案:

答案 0 :(得分:1)

你正在解决错误的问题。

在Web应用程序中使用任何Windows对话框没有正当理由。它只会在服务器上显示对话框(很可能,甚至不会显示)。您需要自己处理 - 要么您希望用户上传一些文件,要么有控制权,或者您希望他选择服务器上已存在的文件/文件夹 - 那就是完全不同。

您根本无法在Web应用程序中使用任何Windows控件。您需要使用Web控件,或编写自己的HTML + JavaScript等。