Thursday, May 20, 2010

Error using WaitHandle.WaitAll() in STA thread.

REF:http://social.msdn.microsoft.com/forums/en-US/netfxbcl/thread/eefc0160-987c-47e1-a41b-bbae96726ec4/

If you don't need to run in STA, you can decorate Main with:

C#: [MTAThreadAttribute()]

VB:

and then use WaitHandle.WaitAll(your_WaitHandle_array) as originally intended.

Sunday, May 16, 2010

Changing the UserAgent of the WebBrowser control -Winforms C#

http://stackoverflow.com/questions/937573/changing-the-useragent-of-the-webbrowser-control-winforms-c

public class ExtendedWebBrowser : WebBrowser
{
bool renavigating = false;

public string UserAgent { get; set; }

public ExtendedWebBrowser()
{
DocumentCompleted += SetupBrowser;

//this will cause SetupBrowser to run (we need a document object)
Navigate("about:blank");
}

void SetupBrowser(object sender, WebBrowserDocumentCompletedEventArgs e)
{
DocumentCompleted -= SetupBrowser;
SHDocVw.WebBrowser xBrowser = (SHDocVw.WebBrowser)ActiveXInstance;
xBrowser.BeforeNavigate2 += BeforeNavigate;
DocumentCompleted += PageLoaded;
}

void PageLoaded(object sender, WebBrowserDocumentCompletedEventArgs e)
{

}

void BeforeNavigate(object pDisp, ref object url, ref object flags, ref object targetFrameName,
ref object postData, ref object headers, ref bool cancel)
{
if (!string.IsNullOrEmpty(UserAgent))
{
if (!renavigating)
{
headers += string.Format("User-Agent: {0}\r\n", UserAgent);
renavigating = true;
cancel = true;
Navigate((string)url, (string)targetFrameName, (byte[])postData, (string)headers);
}
else
{
renavigating = false;
}
}
}
}
Note: To use the method above you’ll need to add a COM reference to “Microsoft Internet Controls”.