我遇到了一个非常奇怪的问题,今天早些时候我有大量代码在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 确切名称的textBox
简而言之,你不应该在构造函数中做这种事情,在表单加载后再做。
然后,如果出现超时,则表示您不需要等待加载表单,并且可以反馈表单正在进行中,或者如果出现exception
,则表示没有拆除表单。
您还可以捕获任何异常,并通知可能发生的故障模式。
背景
表单构造函数在加载(呈现(表单之前运行,因此最好不要在其中做任何昂贵的操作,事实上,任何构造函数都是如此。构造函数用于初始化类/结构运行所需的最小状态。
对于forms构造函数,如果在构造函数期间发生了一个长时间运行的过程,则表单加载将直接受到影响,不会显示,这会让用户(和您(挠头,想知道为什么表单没有显示。更糟糕的是,如果存在未处理的异常,则表单永远不会加载
我对此深表歉意,并感谢我所学到的新知识。
我问题的答案太简单了。。。一个月前,我在我们的api中添加了一个证书,但它似乎从未应用,其他人抱怨我们在服务器上使用的产品存在类似问题。我什么都没想。
昨天,他们让服务器离线几分钟来更换PSU,一旦重新启动。。。我的证书加载了,所以现在它使用https。
它不会"加载"的原因实际上是服务器的超时时间大约需要60秒,所以在等待足够长的时间后填充。