我有一个包含代码的类
代码:
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();
}
但问题是如果我在我的解决方案中有一个类(例如demo.cs)并且我从demo类调用此getMyJson(),然后创建getStringClass的对象,它不打印响应字符串,它将始终打印默认消息“无法连接!稍后再试。”
示例代码
public class demo
{
public void callJson()
{
getStringClass objCls = new getStringClass();
objCls.getMyJson();
}
}
这里有什么问题?我应该更改WebClient吗?在类中使用Thread时有什么问题吗?或者它是不正确的调用线程的方法?当我使用backgroundworker时也存在同样的问题。
答案 0 :(得分:0)
尝试以下代码:
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);
}