Solved

Having trouble loading content in to a MSHTML.Document from a windows form.

Posted on 2008-10-15
1
375 Views
Last Modified: 2013-11-25
I have three .net projects, an ASP.net web app, a Class Library and a Windows Form app. Both the Windows app and the ASP.net app reference the class library. However the class library is behaving differently depending on which application is calling it.

The class library (.dll) contains a function called LoadHtmlIntoDoc. This function accepts a string and loads it in to a MSHTML.HTMLDocumentClass, the HTMLDocumentClass is then used for parsing (it is never used in a UI).

I have a couple versions of the function, both version of the function are shown below (although abbreviated for simplicity....)

Initially this library was developed for use with an ASP.net web application, and BOTH functions below work great when they are called from the ASP.net application. However when the same exact functions are called from the Windows Form application neither of them work. The ASP.net app and the Windows app both link to the same exact .dll, and the augment passed to the functions is identical in both cases; but I'm getting very different results.

When Version 1 of the function is called from the Windows Form it runs, but just an empty document is loaded, So that no matter what I pass to the LoadHtmlIntoDoc function, the following is always true after the function runs :
Doc.documentElement.outerHTML = "<HTML><HEAD></HEAD><BODY><P>&nbsp;</P></BODY></HTML>"


When Version 2 of the function is called from the Windows Form iDoc2.readyState is "loading" forever, causing an infinite loop/lockup...

I have no clue why this .dll would behave differently depending on which type of application is linking to it. I really need this library to function correctly when it is called from a Windows application AND an ASP.net application.

Here is the function I'm using : (two versions of the same function, both work when called from ASP.net, neither work when called from the Windows app.)

Any help if VERY much appreciated!!
'Version 1:
 

Public Function HTMLDocumentClass(ByVal strHTML as string) As Boolean
 

	Dim hr As Integer = WinApis.CreateStreamOnHGlobal _

(Marshal.StringToHGlobalAuto(strHTML), True, stream)
 

	If (hr <> Hresults.S_OK) OrElse (stream Is Nothing) Then

		Return false

	End If
 

	Doc = New HTMLDocumentClass()
 

	persistentStreamInit = TryCast(Doc, IPersistStreamInit)
 

	If persistentStreamInit IsNot Nothing Then

		persistentStreamInit.InitNew()

		persistentStreamInit.Load(stream)

		persistentStreamInit = Nothing

		ret = True

	End If
 

	stream = Nothing
 

	Return True
 

End Function
 
 

'Version 2:

Public Function HTMLDocumentClass(ByVal strHTML as string) As Boolean
 

	Dim Doc As IHTMLDocument2

			

	Doc.clear()

	Doc.write(strHTML)

	Doc.close()
 

	While (Doc.readyState <> "complete" And _

          iDoc2.readyState <> "interactive")

		System.Threading.Thread.Sleep(0)

		System.Threading.Thread.Sleep(100)

		System.Threading.Thread.Sleep(0)

	End While

			

	Return True
 

End Function

Open in new window

0
Comment
Question by:minermadison
1 Comment
 
LVL 1

Accepted Solution

by:
minermadison earned 0 total points
ID: 22723366
I figured out the problem. The difference between the two apps was the thread apartment state. I changed the thread in the windows app to MTA and now it works.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
I need help embedding Base64 Images using VB.Net - When image is a .jpg 2 42
SQL Login 17 40
Variable Event ? 3 23
C# guarantee sql connection close 6 32
In my previous two articles we discussed Binary Serialization (http://www.experts-exchange.com/A_4362.html) and XML Serialization (http://www.experts-exchange.com/A_4425.html). In this article we will try to know more about SOAP (Simple Object Acces…
After several hours of googling I could not gather any information on this topic. There are several ways of controlling the USB port connected to any storage device. The best example of that is by changing the registry value of "HKEY_LOCAL_MACHINE\S…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…
With the power of JIRA, there's an unlimited number of ways you can customize it, use it and benefit from it. With that in mind, there's bound to be things that I wasn't able to cover in this course. With this summary we'll look at some places to go…

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now