ASP.NET线程

时间:2012-02-22 22:26:47

标签: asp.net multithreading

以下代码在Visual Studio中运行正常,但部署到IIS7时网站崩溃。它似乎在Application.DoEvents行上失败,因为BrowsePage.ReadyState总是未初始化(0)并且从未完成(4)。它仅在部署到IIS时使用(使用版本7)。在Visual Sudio中调试时没关系:

    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
            Dim url As String = Request.Url.AbsoluteUri
            Dim Test As Bitmap = ImageFromHtml.ConvertPage(url)
    End Sub

    Public Function ConvertPage(ByVal PageUrl As String) As Bitmap
            Me.PageUrl = PageUrl
            Dim thrCurrent As New Thread(New ThreadStart(AddressOf CreateImage))
            thrCurrent.SetApartmentState(ApartmentState.STA)
            thrCurrent.Start()
            thrCurrent.Join()
            Return ConvertedImage
        End Function

    Private Sub CreateImage()
        Dim BrowsePage As New WebBrowser()
        BrowsePage.ScriptErrorsSuppressed = False
        BrowsePage.ScrollBarsEnabled = False
        BrowsePage.Navigate(PageUrl)
        AddHandler BrowsePage.DocumentCompleted, AddressOf _
WebBrowser_DocumentCompleted
        While BrowsePage.ReadyState <> WebBrowserReadyState.Complete
            Application.DoEvents()
        End While
        BrowsePage.Dispose()
    End Sub

我注意到在IIS上运行时,我无法访问PageURL变量中的网页。因此,我认为这是一个阻塞问题。

WinDBG说:CLR异常 - 代码e0434352(第一次机会)

2 个答案:

答案 0 :(得分:0)

我试图理解为什么异步会帮助你解决问题。根据您的代码,我认为没有理由。如果您确实需要将图像转换为异步,则还有其他可能的方法来处理此问题,具体取决于转换的原因。

一个模式为图像设置占位符,然后使用来自客户端的AJAX调用。然后,您可以在服务端点的末尾进行转换。哦,如果现在更容易获得HTML5网络套接字会有多么有趣。

答案 1 :(得分:0)

我不会在ASP.Net中进行线程处理导致MAJOR问题不值得麻烦相信我曾经有过衬衫。

http://mohamedfaramawi.blogspot.com/2008/01/do-not-use-multi-threading-inside.html

我会设置一个Windows服务来查询数据库,以了解需要完成哪些工作,并让Windows服务完成。