При использовании метода RestSharp Visual Studio прерывается - PullRequest
0 голосов
/ 05 марта 2020

У меня довольно странная проблема, ранее сегодня у меня было большое количество кода, работающего и работающего в Visual Studio, моя форма работала безупречно. Я пошел на обед, вернулся и попытался открыть его и ничего. Он работает, ошибок 0, использует память, но не отображает форму. Насколько я знаю, я ничего не изменил.

Я создал новое Windows Application Form и переписал код построчно, я нашел то, что ломает его, однако я не могу на всю жизнь из меня выяснить, почему это ломает его.

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
  • Как уже говорилось, я создал целый новый проект построчно
  • Точки останова / запись в консоль / log ничего не делает, 0 что-нибудь случится, когда эта строка останется в коде

Другая информация

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

Ответы [ 2 ]

3 голосов
/ 05 марта 2020

Короче говоря, вы не должны делать такие вещи в конструкторе , делайте это после загрузки формы.

Тогда, если у вас есть timeout , вы не ожидаете загрузки формы и можете сообщить о том, что она выполняется, или, если есть exception, вы не сносите форму вниз.

Вы также можете перехватить любые исключения и дать некоторые уведомления о возможных режимах отказа.

Фон

Конструктор форм запускается до загрузки (визуализации) формы, поэтому в них лучше не делать ничего дорогого, в -Что это верно для любого конструктора. Конструктор предназначен для инициализации минимального состояния, в котором должен функционировать класс / структура.

В отношении форм конструктор , если во время конструктора происходит длительный процесс, форма загрузка выполняется напрямую и не заставит пользователя (и вас) чесать голову, задаваясь вопросом, почему форма не отображается. Еще хуже, если есть необработанное исключение ваша форма никогда не загружается

0 голосов
/ 05 марта 2020

Я очень извиняюсь за это и ценю новые знания, которые я выучил.

Ответ на мой вопрос был слишком прост ... Месяц go Я добавил сертификат в наш API, однако это никогда не казалось применимым, другие жаловались на аналогичную проблему с продуктом, который мы используем на сервере. Я ничего об этом не думал.

Вчера они перевели сервер в автономный режим на несколько минут для замены блока питания, после перезапуска ... мой сертификат загружен, поэтому теперь он использует https.

Причина, по которой он не будет "загружаться", была на самом деле в том, что время ожидания сервера составляет ~ 60 секунд, поэтому после ожидания достаточно долго.

...