【问题标题】:When using RestSharp Method Visual Studio breaks使用 RestSharp 方法时,Visual Studio 中断
【发布时间】:2020-03-04 23:37:27
【问题描述】:

我遇到了一个非常奇怪的问题,今天早些时候我有大量代码在 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);”行修复它并允许表单出现。

我尝试了什么?

  • 我已确保正确安装和引用了 RestSharp,我有 甚至尝试了几个版本。
  • 我已经卸载并重新安装了 Visual Studio 2015
  • 如前所述,我已经逐行创建了一个全新的项目
  • 断点/写入控制台/日志什么都不做,0 当该行留在代码中时会发生任何事情

其他信息

程序.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());
        }
    }
}

形式:

实际上只是文本框,其确切名称为 textBox1

【问题讨论】:

    标签: c# winforms visual-studio-2015 restsharp


    【解决方案1】:

    简而言之,你不应该在构造函数中做这种事情,在表单加载之后再做。

    然后,如果您有一个 超时,那么您不会等待表单加载并且可以就它正在进行的事实提供反馈,或者如果有 exception 您正在'不要撕掉表单

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

    背景

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

    对于表单构造函数,如果在构造函数期间发生了长时间运行的过程,则表单加载会直接受到影响,并且不会显示让用户(和您)从头开始你的脑袋想知道为什么表格没有显示。更糟糕的是,如果有一个未处理的异常你的表单永远不会加载

    【讨论】:

    • 这确实很有道理,不过我今天早上尝试了一些事情,但问题仍然存在。使用单独的类再次正常工作,直到它运行 IRestResponse 行的第二个,如果包含该行,则表单拒绝加载。我还尝试将它扔到 TextChanged 方法中,表单加载但第二次我在其中输入一个字母会立即冻结。我想我对此感到非常震惊,因为这条线路昨天早上运行良好。
    • 进一步补充,即使放置在 try-catch 块中,表单也会拒绝加载并且不会引发异常。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-04
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多