WebClient.DownloadString() 不在线程内部工作
WebClient.DownloadString() Is not working inside thread
我有一个 class,其中包含代码
代码:
public class getStringClass
{
public void getMyJson()
{
Thread t = new Thread(new ThreadStart(takeit));
t.IsBackground = true;
t.Start();
}
public void takeit()
{
string jsonResult = "Cannot Connect! Try Later.";
try
{
using (WebClient client = new WebClient())
{
string url = "some url goes here";
jsonResult = client.DownloadString(url); //url contains API to get json response, and its valid ,providing json when i checks with browser.
}
}
catch
{
}
MessageBox.Show(jsonResult);
}
}
当我捕捉到异常并打印 ex.Message 时没有发生异常。当我在 Form.cs 的某些按钮点击事件中使用并提供正确的 响应字符串 .
时,此代码直接工作
buttonGetJson_click(object sender, EventArgs e)
{
getStringClass clsObj = new getStringClass();
clsObj.getMyJson();
}
但问题是,如果我的解决方案中有一个 class(例如 demo.cs),并且我从演示 class 中调用此 getMyJson(),然后创建对象getStringClass,它不打印响应字符串,它总是打印默认消息 "Cannot Connect! Try Later."
示例代码
public class demo
{
public void callJson()
{
getStringClass objCls = new getStringClass();
objCls.getMyJson();
}
}
这里有什么问题?我应该更改 WebClient 吗?在 class 中使用线程有什么问题吗?还是调用线程的方法不正确?当我也使用 backgroundworker 时存在同样的问题。
试试下面的代码:
public void takeit()
{
string jsonResult = "Cannot Connect! Try Later.";
try
{
IWebProxy defWebProxy = WebRequest.DefaultWebProxy;
defWebProxy.Credentials = CredentialCache.DefaultCredentials;
WebClient clien = new WebClient { Proxy = defWebProxy };
jsonResult = clien.DownloadString("http://www.google.com");
}
catch (Exception ex)
{
jsonResult = ex.StackTrace;
}
MessageBox.Show(jsonResult);
}
我有一个 class,其中包含代码
代码:
public class getStringClass
{
public void getMyJson()
{
Thread t = new Thread(new ThreadStart(takeit));
t.IsBackground = true;
t.Start();
}
public void takeit()
{
string jsonResult = "Cannot Connect! Try Later.";
try
{
using (WebClient client = new WebClient())
{
string url = "some url goes here";
jsonResult = client.DownloadString(url); //url contains API to get json response, and its valid ,providing json when i checks with browser.
}
}
catch
{
}
MessageBox.Show(jsonResult);
}
}
当我捕捉到异常并打印 ex.Message 时没有发生异常。当我在 Form.cs 的某些按钮点击事件中使用并提供正确的 响应字符串 .
时,此代码直接工作buttonGetJson_click(object sender, EventArgs e)
{
getStringClass clsObj = new getStringClass();
clsObj.getMyJson();
}
但问题是,如果我的解决方案中有一个 class(例如 demo.cs),并且我从演示 class 中调用此 getMyJson(),然后创建对象getStringClass,它不打印响应字符串,它总是打印默认消息 "Cannot Connect! Try Later."
示例代码
public class demo
{
public void callJson()
{
getStringClass objCls = new getStringClass();
objCls.getMyJson();
}
}
这里有什么问题?我应该更改 WebClient 吗?在 class 中使用线程有什么问题吗?还是调用线程的方法不正确?当我也使用 backgroundworker 时存在同样的问题。
试试下面的代码:
public void takeit()
{
string jsonResult = "Cannot Connect! Try Later.";
try
{
IWebProxy defWebProxy = WebRequest.DefaultWebProxy;
defWebProxy.Credentials = CredentialCache.DefaultCredentials;
WebClient clien = new WebClient { Proxy = defWebProxy };
jsonResult = clien.DownloadString("http://www.google.com");
}
catch (Exception ex)
{
jsonResult = ex.StackTrace;
}
MessageBox.Show(jsonResult);
}