You can do it like this (not tested):
1. Add new extension for control invoking from non-gui threads.
Code:
internal static class CrossInvoker
{
internal static void InvokeEx<T>(this T control, Action<T> action)
where T : ISynchronizeInvoke
{
if (control.InvokeRequired)
control.Invoke(action, new object[] { control });
else
action(control);
}
}
So now all your controls have InvokeEx function.
2. Then edit your WebRequest code (something like this):
Code:
internal void MakeRequest()
{
const string url = "http://www.google.com/";
var request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "GET";
request.UserAgent = "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:13.0) Gecko/20100101 Firefox/13.0.1";
request.KeepAlive = true;
var response = (HttpWebResponse) request.GetResponse();
var reader = new StreamReader(response.GetResponseStream());
// Here we set 'Text' property of txtInput.
txtInput.InvokeEx(c => c.Text = reader.ReadToEnd());
}
3. Then run new thread somewhere in your project: (and maybe wait till it's done)
Code:
new Thread(MakeRequest) { IsBackground = true }.Start();