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);
    }