Skip to content

Commit 9d6bdd5

Browse files
irvinesundayxuzhg
authored andcommitted
Add async await to make UI more responsive
1 parent 830eb35 commit 9d6bdd5

File tree

1 file changed

+40
-30
lines changed

1 file changed

+40
-30
lines changed

src/OoasGui/MainForm.cs

Lines changed: 40 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using Microsoft.OpenApi.OData;
1919
using System.Net;
2020
using System.Xml;
21+
using System.Threading.Tasks;
2122

2223
namespace OoasGui
2324
{
@@ -50,28 +51,28 @@ public MainForm()
5051
oasRichTextBox.WordWrap = false;
5152
}
5253

53-
private void jsonRadioBtn_CheckedChanged(object sender, EventArgs e)
54+
private async void jsonRadioBtn_CheckedChanged(object sender, EventArgs e)
5455
{
5556
Format = OpenApiFormat.Json;
56-
Convert();
57+
await Convert();
5758
}
5859

59-
private void yamlRadioBtn_CheckedChanged(object sender, EventArgs e)
60+
private async void yamlRadioBtn_CheckedChanged(object sender, EventArgs e)
6061
{
6162
Format = OpenApiFormat.Yaml;
62-
Convert();
63+
await Convert();
6364
}
6465

65-
private void v2RadioBtn_CheckedChanged(object sender, EventArgs e)
66+
private async void v2RadioBtn_CheckedChanged(object sender, EventArgs e)
6667
{
6768
Settings.OpenApiSpecVersion = Version = OpenApiSpecVersion.OpenApi2_0;
68-
Convert();
69+
await Convert();
6970
}
7071

71-
private void v3RadioBtn_CheckedChanged(object sender, EventArgs e)
72+
private async void v3RadioBtn_CheckedChanged(object sender, EventArgs e)
7273
{
7374
Settings.OpenApiSpecVersion = Version = OpenApiSpecVersion.OpenApi3_0;
74-
Convert();
75+
await Convert();
7576
}
7677

7778
private void fromFileRadioBtn_CheckedChanged(object sender, EventArgs e)
@@ -91,7 +92,7 @@ private void fromUrlRadioBtn_CheckedChanged(object sender, EventArgs e)
9192
loadBtn.Enabled = true;
9293
}
9394

94-
private void btnBrowse_Click(object sender, EventArgs e)
95+
private async void btnBrowse_Click(object sender, EventArgs e)
9596
{
9697
OpenFileDialog openFileDialog = new OpenFileDialog();
9798
openFileDialog.Filter = "CSDL files (*.xml)|*.xml|All files (*.*)|*.*";
@@ -106,7 +107,7 @@ private void btnBrowse_Click(object sender, EventArgs e)
106107
fileTextBox.Text = openFileDialog.FileName;
107108
csdlRichTextBox.Text = text;
108109
Settings.ServiceRoot = new Uri(openFileDialog.FileName);
109-
Convert();
110+
await Convert();
110111
}
111112
catch (Exception ex)
112113
{
@@ -119,7 +120,7 @@ private void btnBrowse_Click(object sender, EventArgs e)
119120
}
120121
}
121122

122-
private void loadBtn_Click(object sender, EventArgs e)
123+
private async void loadBtn_Click(object sender, EventArgs e)
123124
{
124125
string url = urlTextBox.Text;
125126

@@ -147,7 +148,7 @@ private void loadBtn_Click(object sender, EventArgs e)
147148
LoadEdm(url, csdl);
148149
csdlRichTextBox.Text = FormatXml(csdl);
149150
Settings.ServiceRoot = requestUri;
150-
Convert();
151+
await Convert();
151152
}
152153
catch(Exception ex)
153154
{
@@ -163,6 +164,7 @@ private void LoadEdm(string resource, string text)
163164
{
164165
IEdmModel model;
165166
IEnumerable<EdmError> errors;
167+
166168
if (!CsdlReader.TryParse(XElement.Parse(text).CreateReader(), out model, out errors))
167169
{
168170
StringBuilder sb = new StringBuilder();
@@ -178,19 +180,24 @@ private void LoadEdm(string resource, string text)
178180
EdmModel = model;
179181
}
180182

181-
private void Convert()
183+
private async Task Convert()
182184
{
183185
if (EdmModel == null)
184186
{
185187
return;
186188
}
187189

188-
OpenApiDocument document = EdmModel.ConvertToOpenApi(Settings);
189-
MemoryStream stream = new MemoryStream();
190-
document.Serialize(stream, Version, Format);
191-
stream.Flush();
192-
stream.Position = 0;
193-
string openApi = new StreamReader(stream).ReadToEnd();
190+
string openApi = null;
191+
await Task.Run(() =>
192+
{
193+
OpenApiDocument document = EdmModel.ConvertToOpenApi(Settings);
194+
MemoryStream stream = new MemoryStream();
195+
document.Serialize(stream, Version, Format);
196+
stream.Flush();
197+
stream.Position = 0;
198+
openApi = new StreamReader(stream).ReadToEnd();
199+
});
200+
194201
oasRichTextBox.Text = openApi;
195202
}
196203

@@ -211,7 +218,7 @@ private string FormatXml(string xml)
211218
return sw.ToString();
212219
}
213220

214-
private void saveBtn_Click(object sender, EventArgs e)
221+
private async void saveBtn_Click(object sender, EventArgs e)
215222
{
216223
SaveFileDialog saveFileDialog = new SaveFileDialog();
217224
if (Format == OpenApiFormat.Json)
@@ -220,7 +227,7 @@ private void saveBtn_Click(object sender, EventArgs e)
220227
}
221228
else
222229
{
223-
saveFileDialog.Filter = "YAML files (*.ymal)|*.json|All files (*.*)|*.*";
230+
saveFileDialog.Filter = "YAML files (*.yaml)|*.yaml|All files (*.*)|*.*";
224231
}
225232

226233
saveFileDialog.FilterIndex = 2;
@@ -231,31 +238,34 @@ private void saveBtn_Click(object sender, EventArgs e)
231238
string output = saveFileDialog.FileName;
232239
using (FileStream fs = File.Create(output))
233240
{
234-
OpenApiDocument document = EdmModel.ConvertToOpenApi(Settings);
235-
document.Serialize(fs, Version, Format);
236-
fs.Flush();
241+
await Task.Run(() =>
242+
{
243+
OpenApiDocument document = EdmModel.ConvertToOpenApi(Settings);
244+
document.Serialize(fs, Version, Format);
245+
fs.Flush();
246+
});
237247
}
238248
}
239249

240250
MessageBox.Show("Saved successful!");
241251
}
242252

243-
private void operationIdcheckBox_CheckedChanged(object sender, EventArgs e)
253+
private async void operationIdcheckBox_CheckedChanged(object sender, EventArgs e)
244254
{
245255
Settings.EnableOperationId = !Settings.EnableOperationId;
246-
Convert();
256+
await Convert ();
247257
}
248258

249-
private void VerifyEdmModelcheckBox_CheckedChanged(object sender, EventArgs e)
259+
private async void VerifyEdmModelcheckBox_CheckedChanged(object sender, EventArgs e)
250260
{
251261
Settings.VerifyEdmModel = !Settings.VerifyEdmModel;
252-
Convert();
262+
await Convert();
253263
}
254264

255-
private void NavPathcheckBox_CheckedChanged(object sender, EventArgs e)
265+
private async void NavPathcheckBox_CheckedChanged(object sender, EventArgs e)
256266
{
257267
Settings.EnableNavigationPropertyPath = !Settings.EnableNavigationPropertyPath;
258-
Convert();
268+
await Convert();
259269
}
260270
}
261271
}

0 commit comments

Comments
 (0)