使用 RestSharp 方法时 Visual Studio 中断

When using RestSharp Method Visual Studio breaks

我遇到了一个非常奇怪的问题,今天早些时候我有大量的代码在工作,运行 在 Visual Studio 中,我的表单完美无缺。我去吃午饭回来,试图打开它,但什么也没有。它运行,有 0 个错误,它使用内存但不会显示表单。据我所知,我没有改变任何东西。

我创建了一个新的 Windows 表单应用程序并逐行重写了代码,我找到了它的问题,但是我终其一生都无法弄清楚它为什么会破坏它。

Form1.cs坏了

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using RestSharp;
using Newtonsoft;
using Newtonsoft.Json;

namespace RestApiViewerWUG
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            var client = new RestClient("http://notrelevent.whocares.com/api/v1/token");
            client.Timeout = -1;
            var request = new RestRequest(Method.POST);
            request.AddHeader("Authorization", "Basic cmVzdDo5RGJSIypkQDQ=");
            request.AddHeader("Content-Type", "text/plain");
            request.AddParameter("text/plain", "userName=rest&password=xxxxxx&grant_type=password", ParameterType.RequestBody); 
            IRestResponse response = client.Execute(request); //THIS LINE BREAKS IT

            }

            private void Form1_Load(object sender, EventArgs e)
            {

            }

            private void textBox1_TextChanged(object sender, EventArgs e)
            {

            }
    }
}

问题

只需删除行 "IRestResponse response = client.Execute(request);" 即可修复它并允许显示表单。

我尝试了什么?

其他信息

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace RestApiViewerWUG
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}

表格:

字面意思就是 textBox 与 textBox1 的确切名称

简而言之,您不应该在 构造函数 中执行此类操作,而是在加载表单后执行。

然后,如果您有 超时,则您不会等待表单加载并且可以反馈它正在进行的事实,或者如果有exception 你没有撕掉 表格

您还会捕获任何 异常 ,并给出可能发生的故障模式的一些通知。

背景

表单构造函数 在加载(呈现)表单之前运行,因此最好不要在其中做任何昂贵的事情,事实上这对任何构造函数都是如此。构造函数用于初始化 class/struct 需要运行的最小状态。

关于表单构造函数,如果在构造过程中有一个很长的运行过程,直接影响表单加载,不会显示让用户(和您)挠头想知道为什么表单没有显示。更糟糕的是,如果存在 未处理的异常 您的表单永远不会加载

对此我深表歉意,感谢我学到的新知识。

我的问题的答案太简单了...一个月前我向我们的 api 添加了一个证书,但它似乎从未适用,其他人抱怨我们的产品存在类似问题正在服务器上使用。我什么都没想。

昨天他们让服务器离线几分钟以更换 PSU,一旦重新启动...我的证书已加载,所以现在它正在使用 https。

它不会 "load" 的原因实际上是因为服务器的超时时间需要大约 60 秒,所以在等待足够长的时间后填充。