使用线程获取文件名/路径,但在对话框关闭时无法使页面自动更新

时间:2012-03-21 00:25:46

标签: asp.net multithreading openfiledialog

我的网络应用程序需要能够接受文件名/路径到文件 - 该文件将位于客户端计算机和网络服务器都可用的网络资源上。

在之前的帖子中,Rajkumar Reddy提出了这个策略:

  

添加windows openfile对话框参考toweb应用程序,点击解决方案探索>项目名称添加参考system.windows.forms然后按照这种编码风格在这里我有>给出vb示例代码你可以将它转换为c#如果你面对任何问题都告诉我。

Import system.threading

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click

    Dim objThread As New Thread(AddressOf FnOpenFileDialog)
    objThread.IsBackground = True
    objThread.SetApartmentState(ApartmentState.STA)
    objThread.Start()
End Sub

Private Sub FnOpenFileDialog()
    Dim openfile As New System.Windows.Forms.OpenFileDialog
    'openfile.InitializeLifetimeService()
    'openfile.Filter = String.Format("Image file (*.jpg)|*.jpg|All files (*.*)|*.*")
    openfile.Filter = String.Format("Image file (*.jpg)|*.jpg")
    openfile.Multiselect = True
    openfile.ShowDialog()
End Sub

Protected Sub btnUpload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click Dim objThread As New Thread(AddressOf FnOpenFileDialog) objThread.IsBackground = True objThread.SetApartmentState(ApartmentState.STA) objThread.Start() End Sub Private Sub FnOpenFileDialog() Dim openfile As New System.Windows.Forms.OpenFileDialog 'openfile.InitializeLifetimeService() 'openfile.Filter = String.Format("Image file (*.jpg)|*.jpg|All files (*.*)|*.*") openfile.Filter = String.Format("Image file (*.jpg)|*.jpg") openfile.Multiselect = True openfile.ShowDialog() End Sub

我将这两个sub添加到了一个aspx页面 - 我可以打开openfiledialog。我可以将文件名/路径转换为共享变量。但是,我无法使用返回的信息自动更新页面。

我有更多可以发布的代码 - 但是,我不确定哪个部分不起作用。

1 个答案:

答案 0 :(得分:1)

这根本不起作用。

仅当Web服务器和Web客户端是同一台计算机时,即仅在您自己的计算机上本地测试Web应用程序时,才能在Web应用程序中显示文件对话框。

在服务器上部署Web应用程序时,对话框将在Web服务器上打开,而不是计算机上网,但Web服务器没有可以显示对话框的用户界面。

此外,即使您在本地运行Web应用程序,它也不起作用。当您为对话框启动新线程时,Web服务器将完成页面并将其发送到浏览器。选择文件后,Page对象不再存在。响应已经发送到浏览器,因此更改它为时已晚。