質問編集履歴

8

削除された内容の復元を行いました

2018/11/19 04:20

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- > ```````````````````````````````````````````````````````````````````````````````````````ここ言語を入力 ここ
1
+ C# 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」ついて
test CHANGED
@@ -1,117 +1,501 @@
1
- > ```````````````````````````````````````````````````````````````````````````````````````ここに言語入力
2
-
3
- ここに言語を入力
4
-
5
- ```
6
-
7
- ここ言語入力
8
-
9
- ```
10
-
11
- ここ言語を入力
12
-
13
- ```
14
-
15
- ここに言語入力
16
-
17
- ```
18
-
19
- ここ言語を入力
20
-
21
- ```
22
-
23
- ここに言語を入力
24
-
25
- ```
26
-
27
- ここに言語を入力
28
-
29
- ```
30
-
31
- ここに言語を入力
32
-
33
- ```
34
-
35
- ここに言語を入力
36
-
37
- ```
38
-
39
- ここに言語を入力
40
-
41
- ```
42
-
43
- ここに言語を入力
44
-
45
- ```
46
-
47
- ここに言語を入力
48
-
49
- ```
50
-
51
- ここに言語を入力
52
-
53
- ```
54
-
55
- ここに言語を入力
56
-
57
- ```
58
-
59
- ここに言語を入力
60
-
61
- ```
62
-
63
- ここに言語を入力
64
-
65
- ```
66
-
67
- ここに言語を入力
68
-
69
- ```
70
-
71
- ここに言語を入力
72
-
73
- ```
74
-
75
- ここに言語を入力
76
-
77
- ```
78
-
79
- ここに言語を入力
80
-
81
- ```
82
-
83
- ここに言語を入力
84
-
85
- ```
86
-
87
- ここに言語を入力
88
-
89
- ```
90
-
91
- ここに言語を入力
92
-
93
- ```
94
-
95
- ここに言語を入力
96
-
97
- ```
98
-
99
- ここに言語を入力
100
-
101
- ```
102
-
103
- ここに言語を入力
104
-
105
- ```
106
-
107
- ここに言語を入力
108
-
109
- ```
110
-
111
- ここに言語を入力
112
-
113
- ```
114
-
115
- 引用テキスト
116
-
117
- ```
1
+ visualstudio2017で自動ダウンロードツール作成しています。
2
+
3
+ ここで質問をさせていただき、参考しつつ初めて自身で作成したものです。
4
+
5
+ 流れは、下記になります。
6
+
7
+ ①Pingで疎通確認(YES→② NO→①繰り返す)
8
+
9
+ ②疎通確認出来ればサイトにログイン(MyClock1-4を同時に動作)
10
+
11
+ ②ログインしてからダウンロードURLを開き、ダイアログ等の処理を行う(MyClock1-4を同時動作)
12
+
13
+ ③ ①と②を指定時間ごとに繰り返し(MyClock1-4を同時に動作)
14
+
15
+ ※どの処理途中でも停止ボタン押したい(button_Click2)フォームだけは残してその他処理は終了させたい
16
+
17
+ 今回
18
+
19
+ 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」ついてご教授お願い致します。
20
+
21
+ 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが自分のソースに置き換えたときにどう記述すれば出来るのかを下記ソースの場合で教えていただき、そこから理解出来ればと思っています。
22
+
23
+ よろしくお願いします。
24
+
25
+ ```C#
26
+
27
+ using System;
28
+
29
+ using System.Collections.Generic;
30
+
31
+ using System.ComponentModel;
32
+
33
+ using System.Diagnostics;
34
+
35
+ using System.Net.NetworkInformation;
36
+
37
+ using System.Runtime.InteropServices;
38
+
39
+ using System.Threading;
40
+
41
+ using System.Threading.Tasks;
42
+
43
+ using System.Windows.Forms;
44
+
45
+ namespace WindowsFormsApp1
46
+
47
+ {
48
+
49
+ public partial class Form1 : Form
50
+
51
+ {
52
+
53
+ //宣言文
54
+
55
+ [DllImport("user32.dll")]
56
+
57
+ static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
58
+
59
+ [DllImport("user32.dll")]
60
+
61
+ static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfeter, string lpszClass, string lpszWindow);
62
+
63
+ [DllImport("user32.dll")]
64
+
65
+ static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, String lParam);
66
+
67
+ [DllImport("user32.dll")]
68
+
69
+ static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
70
+
71
+ // キャンセレーショントークンソース
72
+
73
+ private CancellationTokenSource CancellationTokenSource;
74
+
75
+ public Form1()
76
+
77
+ {
78
+
79
+ InitializeComponent();
80
+
81
+ button1.Enabled = true;
82
+
83
+ button2.Enabled = false;
84
+
85
+ }
86
+
87
+
88
+
89
+ public void Timers(EventHandler eventHandler)//3秒ごとに動くタイマー
90
+
91
+ {
92
+
93
+ var timer = new System.Windows.Forms.Timer();
94
+
95
+ timer.Tick += new EventHandler(eventHandler);
96
+
97
+ timer.Interval = 1000;
98
+
99
+ timer.Start();
100
+
101
+ }
102
+
103
+ public void loop(EventHandler eventHandler)//numericUpDown1 * 60秒 でループするタイマー
104
+
105
+ {
106
+
107
+ int intVal = Decimal.ToInt32(numericUpDown1.Value);
108
+
109
+ var timer = new System.Windows.Forms.Timer();
110
+
111
+ timer.Tick += new EventHandler(eventHandler);
112
+
113
+ timer.Interval = intVal * 60000;
114
+
115
+ timer.Start();
116
+
117
+ }
118
+
119
+ private int status;
120
+
121
+ private void timer_Handler(object sender, EventArgs e)//MyClockを順番に動作させる
122
+
123
+ {
124
+
125
+ switch (status)
126
+
127
+ {
128
+
129
+ case 1:
130
+
131
+ MyClock1();
132
+
133
+ status = 2;
134
+
135
+ break;
136
+
137
+ case 2:
138
+
139
+ MyClock2();
140
+
141
+ status = 3;
142
+
143
+ break;
144
+
145
+ case 3:
146
+
147
+ MyClock3();
148
+
149
+ status = 4;
150
+
151
+ break;
152
+
153
+ case 4:
154
+
155
+ MyClock4();
156
+
157
+ status = 0;
158
+
159
+ break;
160
+
161
+ default:
162
+
163
+ status = 1;
164
+
165
+ break;
166
+
167
+ }
168
+
169
+ }
170
+
171
+ //メインの処理
172
+
173
+ public void button1_Click(object sender, EventArgs e)
174
+
175
+ {
176
+
177
+ button1.Enabled = false;
178
+
179
+ button2.Enabled = true;
180
+
181
+ this.CancellationTokenSource = new CancellationTokenSource();
182
+
183
+ // 処理を開始します(キャンセルトークンを渡す必要があります)
184
+
185
+ First_run(CancellationTokenSource.Token);
186
+
187
+ loop(Main_loop);
188
+
189
+ }
190
+
191
+ public async Task Ping_com(CancellationToken token)
192
+
193
+ {
194
+
195
+ await Task.Delay(1000);
196
+
197
+ string address = textBox0.Text;
198
+
199
+ System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
200
+
201
+ //結果を表示
202
+
203
+ while (true)
204
+
205
+ {
206
+
207
+ label1.Text = "\n通信確認中";
208
+
209
+ Task.Delay(1000).Wait();
210
+
211
+ label1.Refresh();
212
+
213
+ Ping ins_Ping = new Ping();
214
+
215
+ string host = textBox0.Text;
216
+
217
+ int timeout = 1000;
218
+
219
+ PingReply ins_PingReply = ins_Ping.Send(host, timeout);
220
+
221
+ if (ins_PingReply.Status == IPStatus.Success)
222
+
223
+ {
224
+
225
+ label1.Text = "\n通信成功";
226
+
227
+ label1.Refresh();
228
+
229
+ Task.Delay(5000).Wait();
230
+
231
+ // ループ終了
232
+
233
+ break;
234
+
235
+ }
236
+
237
+ else
238
+
239
+ {
240
+
241
+ label1.Text = "\n通信失敗";
242
+
243
+ label1.Refresh();
244
+
245
+ if (token.IsCancellationRequested)
246
+
247
+ {
248
+
249
+ // キャンセル処理
250
+
251
+ Debug.WriteLine("comをキャンセルします...");
252
+
253
+ // ループ終了
254
+
255
+
256
+
257
+ }
258
+
259
+ await Task.Delay(1000);
260
+
261
+ }
262
+
263
+ }
264
+
265
+ }
266
+
267
+ public async Task First_run(CancellationToken token)
268
+
269
+ {
270
+
271
+ try
272
+
273
+ {
274
+
275
+         //MyClock1-4のループ
276
+
277
+ Timers(timer_Handler);
278
+
279
+ status = 1;
280
+
281
+         //疎通確認
282
+
283
+ await Ping_com(token);
284
+
285
+ label1.Text = "接続中";
286
+
287
+ label1.Refresh();
288
+
289
+ //特定のURLに接続
290
+
291
+ webBrowser1.Visible = true;
292
+
293
+ webBrowser1.Navigate("https://");
294
+
295
+ //ページの読み込み完了まで待つ
296
+
297
+ OpenWebWait();
298
+
299
+ //1番目フレーム内のNameを取得
300
+
301
+ HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
302
+
303
+ HtmlElementCollection elements = iframe.Document.All;
304
+
305
+ HtmlElement id = elements.GetElementsByName("userName")[0];
306
+
307
+ HtmlElement pw = elements.GetElementsByName("pwd")[0];
308
+
309
+ //ID・passを入力
310
+
311
+ id.InnerText = textBox1.Text;
312
+
313
+ pw.InnerText = textBox2.Text;
314
+
315
+ //Submitボタンをクリック
316
+
317
+ HtmlElement login = elements.GetElementsByName("Submit")[0];
318
+
319
+ login.InvokeMember("click");
320
+
321
+ //ダウンロードページを開く
322
+
323
+ webBrowser2.Visible = true;
324
+
325
+ webBrowser2.Navigate("https://");
326
+
327
+ label1.Text = "\nダウンロード処理中";
328
+
329
+ }
330
+
331
+ catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
332
+
333
+ {
334
+
335
+ Task.Delay(5000).Wait();
336
+
337
+ First_run(CancellationTokenSource.Token);
338
+
339
+ }
340
+
341
+ }
342
+
343
+ private void Main_loop(object sender, EventArgs e)
344
+
345
+ {
346
+
347
+ try
348
+
349
+ {
350
+
351
+ //特定のURLに接続
352
+
353
+ webBrowser1.Visible = true;
354
+
355
+ webBrowser1.Navigate("https://");
356
+
357
+ //ページの読み込み完了まで待つ
358
+
359
+ OpenWebWait();
360
+
361
+ //1番目フレーム内のNameを取得
362
+
363
+ HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
364
+
365
+ HtmlElementCollection elements = iframe.Document.All;
366
+
367
+ HtmlElement id = elements.GetElementsByName("userName")[0];
368
+
369
+ HtmlElement pw = elements.GetElementsByName("pwd")[0];
370
+
371
+ //ID・passを入力
372
+
373
+ id.InnerText = textBox1.Text;
374
+
375
+ pw.InnerText = textBox2.Text;
376
+
377
+ //Submitボタンをクリック
378
+
379
+ HtmlElement login = elements.GetElementsByName("Submit")[0];
380
+
381
+ login.InvokeMember("click");
382
+
383
+ //ダウンロードページを開く
384
+
385
+ webBrowser2.Visible = true;
386
+
387
+ webBrowser2.Navigate("https://");
388
+
389
+ }
390
+
391
+ catch (Exception w) when (w is ObjectDisposedException || w is InvalidOperationException || w is ArgumentOutOfRangeException)
392
+
393
+ {
394
+
395
+ Task.Delay(1000).Wait();
396
+
397
+ }
398
+
399
+ }
400
+
401
+
402
+
403
+ void MyClock1()
404
+
405
+ {
406
+
407
+ //「セキュリティの警告」ダイアログがもしあればを承認する文
408
+
409
+ }
410
+
411
+ void MyClock2()
412
+
413
+ {
414
+
415
+ //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
416
+
417
+ }
418
+
419
+ void MyClock3()
420
+
421
+ {
422
+
423
+ //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
424
+
425
+ }
426
+
427
+
428
+
429
+ void MyClock4()
430
+
431
+ {
432
+
433
+ //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
434
+
435
+ }
436
+
437
+ private void button2_Click(object sender, EventArgs e)
438
+
439
+ {
440
+
441
+ //アプリケーションを終了させる(フォームのみ残してその他処理は終了させたい)
442
+
443
+ backgroundWorker1.RunWorkerAsync();
444
+
445
+ }
446
+
447
+ private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
448
+
449
+     {
450
+
451
+ Application.Exit();
452
+
453
+ }
454
+
455
+ private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
456
+
457
+ {
458
+
459
+ Application.Exit();
460
+
461
+ }
462
+
463
+ public bool OpenWebWait()
464
+
465
+ {
466
+
467
+ try
468
+
469
+ {
470
+
471
+ //読み込み完了まで待つ
472
+
473
+ while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
474
+
475
+ {
476
+
477
+ //無処理
478
+
479
+ System.Windows.Forms.Application.DoEvents();
480
+
481
+ System.Threading.Thread.Sleep(300);
482
+
483
+ }
484
+
485
+ return true;
486
+
487
+ }
488
+
489
+ catch (Exception ex)
490
+
491
+ {
492
+
493
+ return false;
494
+
495
+ }
496
+
497
+ }
498
+
499
+ }
500
+
501
+ }

7

dd

2018/11/19 04:20

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- C# 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」ついて
1
+ > ```````````````````````````````````````````````````````````````````````````````````````ここ言語を入力 ここ
test CHANGED
@@ -1,557 +1,117 @@
1
- visualstudio2017で自動ダウンロードツール作成しています。
1
+ > ```````````````````````````````````````````````````````````````````````````````````````ここに言語入力
2
2
 
3
- ここで質問をさせていただき、参考にしつつ初めて自身で作成したものです。
4
-
5
- 流れは、下記になります。
6
-
7
- ①Pingで疎通確認(YES→②に NO→①を繰り返す)
8
-
9
- ②疎通確認出来ればサイトにログイン(MyClock1-4を同時に動作)
10
-
11
- ②ログインしてからダウンロードURLを開き、ダイアログ等の処理を行う(MyClock1-4を同時に動作)
12
-
13
- ③ ①と②を指定時間ごとに繰り返し(MyClock1-4を同時に動作)
14
-
15
- ※どの処理途中でも停止ボタンを押したい(button_Click2)フォームだけは残してその他処理は終了させたい
16
-
17
-
18
-
19
- 今回
20
-
21
- 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」についてご教授お願い致します。
22
-
23
- 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが自分のソースに置き換えたときにどう記述すれば出来るのかを下記ソースの場合で教えていただき、そこから理解出来ればと思っています。
24
-
25
- よろしくお願いします。
26
-
27
-
28
-
29
- ```C#
30
-
31
- using System;
32
-
33
- using System.Collections.Generic;
34
-
35
- using System.ComponentModel;
36
-
37
- using System.Diagnostics;
38
-
39
- using System.Net.NetworkInformation;
40
-
41
- using System.Runtime.InteropServices;
42
-
43
- using System.Threading;
44
-
45
- using System.Threading.Tasks;
46
-
47
- using System.Windows.Forms;
48
-
49
-
50
-
51
- namespace WindowsFormsApp1
52
-
53
- {
54
-
55
- public partial class Form1 : Form
56
-
57
- {
58
-
59
- //宣言文
60
-
61
- [DllImport("user32.dll")]
62
-
63
- static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
64
-
65
- [DllImport("user32.dll")]
66
-
67
- static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfeter, string lpszClass, string lpszWindow);
68
-
69
- [DllImport("user32.dll")]
70
-
71
- static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, String lParam);
72
-
73
- [DllImport("user32.dll")]
74
-
75
- static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
76
-
77
- // キャンセレーショントークンソース
78
-
79
- private CancellationTokenSource CancellationTokenSource;
80
-
81
- public Form1()
82
-
83
- {
84
-
85
- InitializeComponent();
86
-
87
- button1.Enabled = true;
88
-
89
- button2.Enabled = false;
90
-
91
- }
92
-
93
-
94
-
95
- public void Timers(EventHandler eventHandler)//3秒ごとに動くタイマー
96
-
97
- {
98
-
99
- var timer = new System.Windows.Forms.Timer();
100
-
101
- timer.Tick += new EventHandler(eventHandler);
102
-
103
- timer.Interval = 1000;
104
-
105
- timer.Start();
106
-
107
-
108
-
109
- }
110
-
111
- public void loop(EventHandler eventHandler)//numericUpDown1 * 60秒 でループするタイマー
112
-
113
- {
114
-
115
- int intVal = Decimal.ToInt32(numericUpDown1.Value);
116
-
117
- var timer = new System.Windows.Forms.Timer();
118
-
119
- timer.Tick += new EventHandler(eventHandler);
120
-
121
- timer.Interval = intVal * 60000;
122
-
123
- timer.Start();
124
-
125
- }
126
-
127
- private int status;
128
-
129
- private void timer_Handler(object sender, EventArgs e)//MyClockを順番に動作させる
130
-
131
- {
132
-
133
- switch (status)
134
-
135
- {
136
-
137
- case 1:
138
-
139
- MyClock1();
140
-
141
- status = 2;
142
-
143
- break;
144
-
145
- case 2:
146
-
147
- MyClock2();
148
-
149
- status = 3;
150
-
151
- break;
152
-
153
- case 3:
154
-
155
- MyClock3();
156
-
157
- status = 4;
158
-
159
- break;
160
-
161
- case 4:
162
-
163
- MyClock4();
164
-
165
- status = 0;
166
-
167
- break;
168
-
169
- default:
3
+ ここに言語を入力
170
-
171
- status = 1;
172
-
173
- break;
174
-
175
- }
176
-
177
- }
178
-
179
- //メインの処理
180
-
181
- public void button1_Click(object sender, EventArgs e)
182
-
183
- {
184
-
185
- button1.Enabled = false;
186
-
187
- button2.Enabled = true;
188
-
189
-
190
-
191
- this.CancellationTokenSource = new CancellationTokenSource();
192
-
193
- // 処理を開始します(キャンセルトークンを渡す必要があります)
194
-
195
- First_run(CancellationTokenSource.Token);
196
-
197
- loop(Main_loop);
198
-
199
-
200
-
201
- }
202
-
203
- public async Task Ping_com(CancellationToken token)
204
-
205
- {
206
-
207
- await Task.Delay(1000);
208
-
209
- string address = textBox0.Text;
210
-
211
-
212
-
213
- System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
214
-
215
-
216
-
217
- //結果を表示
218
-
219
- while (true)
220
-
221
- {
222
-
223
- label1.Text = "\n通信確認中";
224
-
225
- Task.Delay(1000).Wait();
226
-
227
- label1.Refresh();
228
-
229
- Ping ins_Ping = new Ping();
230
-
231
- string host = textBox0.Text;
232
-
233
- int timeout = 1000;
234
-
235
- PingReply ins_PingReply = ins_Ping.Send(host, timeout);
236
-
237
- if (ins_PingReply.Status == IPStatus.Success)
238
-
239
- {
240
-
241
-
242
-
243
- label1.Text = "\n通信成功";
244
-
245
- label1.Refresh();
246
-
247
- Task.Delay(5000).Wait();
248
-
249
- // ループ終了
250
-
251
- break;
252
-
253
- }
254
-
255
- else
256
-
257
- {
258
-
259
- label1.Text = "\n通信失敗";
260
-
261
- label1.Refresh();
262
-
263
- if (token.IsCancellationRequested)
264
-
265
- {
266
-
267
- // キャンセル処理
268
-
269
- Debug.WriteLine("comをキャンセルします...");
270
-
271
-
272
-
273
- // ループ終了
274
-
275
-
276
-
277
- }
278
-
279
- await Task.Delay(1000);
280
-
281
- }
282
-
283
- }
284
-
285
-
286
-
287
- }
288
-
289
- public async Task First_run(CancellationToken token)
290
-
291
- {
292
-
293
- try
294
-
295
- {
296
-
297
-         //MyClock1-4のループ
298
-
299
- Timers(timer_Handler);
300
-
301
- status = 1;
302
-
303
-
304
-
305
-         //疎通確認
306
-
307
- await Ping_com(token);
308
-
309
-
310
-
311
-
312
-
313
- label1.Text = "接続中";
314
-
315
- label1.Refresh();
316
-
317
- //特定のURLに接続
318
-
319
- webBrowser1.Visible = true;
320
-
321
- webBrowser1.Navigate("https://");
322
-
323
-
324
-
325
- //ページの読み込み完了まで待つ
326
-
327
- OpenWebWait();
328
-
329
-
330
-
331
- //1番目フレーム内のNameを取得
332
-
333
- HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
334
-
335
- HtmlElementCollection elements = iframe.Document.All;
336
-
337
- HtmlElement id = elements.GetElementsByName("userName")[0];
338
-
339
- HtmlElement pw = elements.GetElementsByName("pwd")[0];
340
-
341
- //ID・passを入力
342
-
343
- id.InnerText = textBox1.Text;
344
-
345
- pw.InnerText = textBox2.Text;
346
-
347
-
348
-
349
- //Submitボタンをクリック
350
-
351
- HtmlElement login = elements.GetElementsByName("Submit")[0];
352
-
353
- login.InvokeMember("click");
354
-
355
-
356
-
357
-
358
-
359
- //ダウンロードページを開く
360
-
361
- webBrowser2.Visible = true;
362
-
363
- webBrowser2.Navigate("https://");
364
-
365
- label1.Text = "\nダウンロード処理中";
366
-
367
- }
368
-
369
- catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
370
-
371
- {
372
-
373
- Task.Delay(5000).Wait();
374
-
375
- First_run(CancellationTokenSource.Token);
376
-
377
-
378
-
379
- }
380
-
381
- }
382
-
383
- private void Main_loop(object sender, EventArgs e)
384
-
385
- {
386
-
387
- try
388
-
389
- {
390
-
391
-
392
-
393
- //特定のURLに接続
394
-
395
- webBrowser1.Visible = true;
396
-
397
- webBrowser1.Navigate("https://");
398
-
399
-
400
-
401
- //ページの読み込み完了まで待つ
402
-
403
- OpenWebWait();
404
-
405
-
406
-
407
- //1番目フレーム内のNameを取得
408
-
409
- HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
410
-
411
- HtmlElementCollection elements = iframe.Document.All;
412
-
413
- HtmlElement id = elements.GetElementsByName("userName")[0];
414
-
415
- HtmlElement pw = elements.GetElementsByName("pwd")[0];
416
-
417
- //ID・passを入力
418
-
419
- id.InnerText = textBox1.Text;
420
-
421
- pw.InnerText = textBox2.Text;
422
-
423
- //Submitボタンをクリック
424
-
425
- HtmlElement login = elements.GetElementsByName("Submit")[0];
426
-
427
- login.InvokeMember("click");
428
-
429
-
430
-
431
- //ダウンロードページを開く
432
-
433
- webBrowser2.Visible = true;
434
-
435
- webBrowser2.Navigate("https://");
436
-
437
- }
438
-
439
- catch (Exception w) when (w is ObjectDisposedException || w is InvalidOperationException || w is ArgumentOutOfRangeException)
440
-
441
- {
442
-
443
- Task.Delay(1000).Wait();
444
-
445
- }
446
-
447
- }
448
-
449
-
450
-
451
- void MyClock1()
452
-
453
- {
454
-
455
- //「セキュリティの警告」ダイアログがもしあればを承認する文
456
-
457
- }
458
-
459
- void MyClock2()
460
-
461
- {
462
-
463
- //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
464
-
465
- }
466
-
467
- void MyClock3()
468
-
469
- {
470
-
471
- //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
472
-
473
- }
474
-
475
-
476
-
477
- void MyClock4()
478
-
479
- {
480
-
481
- //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
482
-
483
- }
484
-
485
- private void button2_Click(object sender, EventArgs e)
486
-
487
- {
488
-
489
- //アプリケーションを終了させる(フォームのみ残してその他処理は終了させたい)
490
-
491
- backgroundWorker1.RunWorkerAsync();
492
-
493
- }
494
-
495
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
496
-
497
-     {
498
-
499
- Application.Exit();
500
-
501
- }
502
-
503
-
504
-
505
- private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
506
-
507
- {
508
-
509
- Application.Exit();
510
-
511
- }
512
-
513
- public bool OpenWebWait()
514
-
515
- {
516
-
517
- try
518
-
519
- {
520
-
521
- //読み込み完了まで待つ
522
-
523
- while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
524
-
525
- {
526
-
527
- //無処理
528
-
529
- System.Windows.Forms.Application.DoEvents();
530
-
531
- System.Threading.Thread.Sleep(300);
532
-
533
- }
534
-
535
-
536
-
537
- return true;
538
-
539
- }
540
-
541
- catch (Exception ex)
542
-
543
- {
544
-
545
- return false;
546
-
547
- }
548
-
549
- }
550
-
551
- }
552
-
553
- }
554
-
555
-
556
4
 
557
5
  ```
6
+
7
+ ここに言語を入力
8
+
9
+ ```
10
+
11
+ ここに言語を入力
12
+
13
+ ```
14
+
15
+ ここに言語を入力
16
+
17
+ ```
18
+
19
+ ここに言語を入力
20
+
21
+ ```
22
+
23
+ ここに言語を入力
24
+
25
+ ```
26
+
27
+ ここに言語を入力
28
+
29
+ ```
30
+
31
+ ここに言語を入力
32
+
33
+ ```
34
+
35
+ ここに言語を入力
36
+
37
+ ```
38
+
39
+ ここに言語を入力
40
+
41
+ ```
42
+
43
+ ここに言語を入力
44
+
45
+ ```
46
+
47
+ ここに言語を入力
48
+
49
+ ```
50
+
51
+ ここに言語を入力
52
+
53
+ ```
54
+
55
+ ここに言語を入力
56
+
57
+ ```
58
+
59
+ ここに言語を入力
60
+
61
+ ```
62
+
63
+ ここに言語を入力
64
+
65
+ ```
66
+
67
+ ここに言語を入力
68
+
69
+ ```
70
+
71
+ ここに言語を入力
72
+
73
+ ```
74
+
75
+ ここに言語を入力
76
+
77
+ ```
78
+
79
+ ここに言語を入力
80
+
81
+ ```
82
+
83
+ ここに言語を入力
84
+
85
+ ```
86
+
87
+ ここに言語を入力
88
+
89
+ ```
90
+
91
+ ここに言語を入力
92
+
93
+ ```
94
+
95
+ ここに言語を入力
96
+
97
+ ```
98
+
99
+ ここに言語を入力
100
+
101
+ ```
102
+
103
+ ここに言語を入力
104
+
105
+ ```
106
+
107
+ ここに言語を入力
108
+
109
+ ```
110
+
111
+ ここに言語を入力
112
+
113
+ ```
114
+
115
+ 引用テキスト
116
+
117
+ ```

6

ソースの変更

2018/10/04 04:24

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -324,6 +324,202 @@
324
324
 
325
325
  //ページの読み込み完了まで待つ
326
326
 
327
+ OpenWebWait();
328
+
329
+
330
+
331
+ //1番目フレーム内のNameを取得
332
+
333
+ HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
334
+
335
+ HtmlElementCollection elements = iframe.Document.All;
336
+
337
+ HtmlElement id = elements.GetElementsByName("userName")[0];
338
+
339
+ HtmlElement pw = elements.GetElementsByName("pwd")[0];
340
+
341
+ //ID・passを入力
342
+
343
+ id.InnerText = textBox1.Text;
344
+
345
+ pw.InnerText = textBox2.Text;
346
+
347
+
348
+
349
+ //Submitボタンをクリック
350
+
351
+ HtmlElement login = elements.GetElementsByName("Submit")[0];
352
+
353
+ login.InvokeMember("click");
354
+
355
+
356
+
357
+
358
+
359
+ //ダウンロードページを開く
360
+
361
+ webBrowser2.Visible = true;
362
+
363
+ webBrowser2.Navigate("https://");
364
+
365
+ label1.Text = "\nダウンロード処理中";
366
+
367
+ }
368
+
369
+ catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
370
+
371
+ {
372
+
373
+ Task.Delay(5000).Wait();
374
+
375
+ First_run(CancellationTokenSource.Token);
376
+
377
+
378
+
379
+ }
380
+
381
+ }
382
+
383
+ private void Main_loop(object sender, EventArgs e)
384
+
385
+ {
386
+
387
+ try
388
+
389
+ {
390
+
391
+
392
+
393
+ //特定のURLに接続
394
+
395
+ webBrowser1.Visible = true;
396
+
397
+ webBrowser1.Navigate("https://");
398
+
399
+
400
+
401
+ //ページの読み込み完了まで待つ
402
+
403
+ OpenWebWait();
404
+
405
+
406
+
407
+ //1番目フレーム内のNameを取得
408
+
409
+ HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
410
+
411
+ HtmlElementCollection elements = iframe.Document.All;
412
+
413
+ HtmlElement id = elements.GetElementsByName("userName")[0];
414
+
415
+ HtmlElement pw = elements.GetElementsByName("pwd")[0];
416
+
417
+ //ID・passを入力
418
+
419
+ id.InnerText = textBox1.Text;
420
+
421
+ pw.InnerText = textBox2.Text;
422
+
423
+ //Submitボタンをクリック
424
+
425
+ HtmlElement login = elements.GetElementsByName("Submit")[0];
426
+
427
+ login.InvokeMember("click");
428
+
429
+
430
+
431
+ //ダウンロードページを開く
432
+
433
+ webBrowser2.Visible = true;
434
+
435
+ webBrowser2.Navigate("https://");
436
+
437
+ }
438
+
439
+ catch (Exception w) when (w is ObjectDisposedException || w is InvalidOperationException || w is ArgumentOutOfRangeException)
440
+
441
+ {
442
+
443
+ Task.Delay(1000).Wait();
444
+
445
+ }
446
+
447
+ }
448
+
449
+
450
+
451
+ void MyClock1()
452
+
453
+ {
454
+
455
+ //「セキュリティの警告」ダイアログがもしあればを承認する文
456
+
457
+ }
458
+
459
+ void MyClock2()
460
+
461
+ {
462
+
463
+ //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
464
+
465
+ }
466
+
467
+ void MyClock3()
468
+
469
+ {
470
+
471
+ //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
472
+
473
+ }
474
+
475
+
476
+
477
+ void MyClock4()
478
+
479
+ {
480
+
481
+ //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
482
+
483
+ }
484
+
485
+ private void button2_Click(object sender, EventArgs e)
486
+
487
+ {
488
+
489
+ //アプリケーションを終了させる(フォームのみ残してその他処理は終了させたい)
490
+
491
+ backgroundWorker1.RunWorkerAsync();
492
+
493
+ }
494
+
495
+ private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
496
+
497
+     {
498
+
499
+ Application.Exit();
500
+
501
+ }
502
+
503
+
504
+
505
+ private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
506
+
507
+ {
508
+
509
+ Application.Exit();
510
+
511
+ }
512
+
513
+ public bool OpenWebWait()
514
+
515
+ {
516
+
517
+ try
518
+
519
+ {
520
+
521
+ //読み込み完了まで待つ
522
+
327
523
  while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
328
524
 
329
525
  {
@@ -332,199 +528,23 @@
332
528
 
333
529
  System.Windows.Forms.Application.DoEvents();
334
530
 
335
- System.Threading.Thread.Sleep(100);
531
+ System.Threading.Thread.Sleep(300);
336
532
 
337
533
  }
338
534
 
339
535
 
340
536
 
341
- //1番目フレーム内のNameを取得
342
-
343
- HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
344
-
345
- HtmlElementCollection elements = iframe.Document.All;
346
-
347
- HtmlElement id = elements.GetElementsByName("userName")[0];
348
-
349
- HtmlElement pw = elements.GetElementsByName("pwd")[0];
350
-
351
- //ID・passを入力
352
-
353
- id.InnerText = textBox1.Text;
354
-
355
- pw.InnerText = textBox2.Text;
356
-
357
-
358
-
359
- //Submitボタンをクリック
360
-
361
- HtmlElement login = elements.GetElementsByName("Submit")[0];
362
-
363
- login.InvokeMember("click");
364
-
365
-
366
-
367
-
368
-
369
- //ダウンロードページを開く
370
-
371
- webBrowser2.Visible = true;
537
+ return true;
372
-
373
- webBrowser2.Navigate("https://");
538
+
374
-
375
- label1.Text = "\nダウンロード処理中";
376
-
377
- }
539
+ }
378
-
540
+
379
- catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
541
+ catch (Exception ex)
380
-
542
+
381
- {
543
+ {
382
-
544
+
383
- Task.Delay(5000).Wait();
545
+ return false;
384
-
385
- First_run(CancellationTokenSource.Token);
546
+
386
-
387
-
388
-
389
- }
547
+ }
390
-
391
- }
392
-
393
- private void Main_loop(object sender, EventArgs e)
394
-
395
- {
396
-
397
- try
398
-
399
- {
400
-
401
-
402
-
403
- //特定のURLに接続
404
-
405
- webBrowser1.Visible = true;
406
-
407
- webBrowser1.Navigate("https://");
408
-
409
-
410
-
411
- //ページの読み込み完了まで待つ
412
-
413
- while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
414
-
415
- {
416
-
417
- //無処理
418
-
419
- System.Windows.Forms.Application.DoEvents();
420
-
421
- System.Threading.Thread.Sleep(100);
422
-
423
- }
424
-
425
- //1番目フレーム内のNameを取得
426
-
427
- HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
428
-
429
- HtmlElementCollection elements = iframe.Document.All;
430
-
431
- HtmlElement id = elements.GetElementsByName("userName")[0];
432
-
433
- HtmlElement pw = elements.GetElementsByName("pwd")[0];
434
-
435
- //ID・passを入力
436
-
437
- id.InnerText = textBox1.Text;
438
-
439
- pw.InnerText = textBox2.Text;
440
-
441
- //Submitボタンをクリック
442
-
443
- HtmlElement login = elements.GetElementsByName("Submit")[0];
444
-
445
- login.InvokeMember("click");
446
-
447
-
448
-
449
- //ダウンロードページを開く
450
-
451
- webBrowser2.Visible = true;
452
-
453
- webBrowser2.Navigate("https://");
454
-
455
- }
456
-
457
- catch (Exception w) when (w is ObjectDisposedException || w is InvalidOperationException || w is ArgumentOutOfRangeException)
458
-
459
- {
460
-
461
- Task.Delay(1000).Wait();
462
-
463
- }
464
-
465
- }
466
-
467
-
468
-
469
- void MyClock1()
470
-
471
- {
472
-
473
- //「セキュリティの警告」ダイアログがもしあればを承認する文
474
-
475
- }
476
-
477
- void MyClock2()
478
-
479
- {
480
-
481
- //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
482
-
483
- }
484
-
485
- void MyClock3()
486
-
487
- {
488
-
489
- //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
490
-
491
- }
492
-
493
-
494
-
495
- void MyClock4()
496
-
497
- {
498
-
499
- //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
500
-
501
- }
502
-
503
- private void button2_Click(object sender, EventArgs e)
504
-
505
- {
506
-
507
- //アプリケーションを終了させる(フォームのみ残してその他処理は終了させたい)
508
-
509
- backgroundWorker1.RunWorkerAsync();
510
-
511
- }
512
-
513
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
514
-
515
-     {
516
-
517
- Application.Exit();
518
-
519
- }
520
-
521
-
522
-
523
- private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
524
-
525
- {
526
-
527
- Application.Exit();
528
548
 
529
549
  }
530
550
 

5

変更

2018/10/03 23:57

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」についてご教授お願い致します。
22
22
 
23
- 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが自分のソースに置き換えたときにどう記述すれば出来るのかを単純に教えていただき、そこから理解出来ればと思っています。
23
+ 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが自分のソースに置き換えたときにどう記述すれば出来るのかを下記ソースの場合で教えていただき、そこから理解出来ればと思っています。
24
24
 
25
25
  よろしくお願いします。
26
26
 

4

変更

2018/10/02 00:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -294,12 +294,16 @@
294
294
 
295
295
  {
296
296
 
297
+         //MyClock1-4のループ
298
+
297
299
  Timers(timer_Handler);
298
300
 
299
301
  status = 1;
300
302
 
301
303
 
302
304
 
305
+         //疎通確認
306
+
303
307
  await Ping_com(token);
304
308
 
305
309
 
@@ -360,10 +364,6 @@
360
364
 
361
365
 
362
366
 
363
- //タイマー2を設定
364
-
365
- //Timers(MyClock2);
366
-
367
367
 
368
368
 
369
369
  //ダウンロードページを開く
@@ -514,7 +514,7 @@
514
514
 
515
515
      {
516
516
 
517
- //Application.Exit();
517
+ Application.Exit();
518
518
 
519
519
  }
520
520
 

3

質問の変更

2018/10/02 00:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -312,8 +312,6 @@
312
312
 
313
313
  //特定のURLに接続
314
314
 
315
- //ブラウザのサイズを変更する
316
-
317
315
  webBrowser1.Visible = true;
318
316
 
319
317
  webBrowser1.Navigate("https://");
@@ -376,14 +374,6 @@
376
374
 
377
375
  label1.Text = "\nダウンロード処理中";
378
376
 
379
- //タイマー3を設定
380
-
381
- //Timers(MyClock3);
382
-
383
-
384
-
385
- //Timers(MyClock4);
386
-
387
377
  }
388
378
 
389
379
  catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
@@ -480,7 +470,7 @@
480
470
 
481
471
  {
482
472
 
483
- //「セキュリティの警告」を承認する文
473
+ //「セキュリティの警告」ダイアログがもしあればを承認する文
484
474
 
485
475
  }
486
476
 
@@ -488,7 +478,7 @@
488
478
 
489
479
  {
490
480
 
491
- //「ファイルのダウンロード」保存ボタンを押す文
481
+ //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
492
482
 
493
483
  }
494
484
 
@@ -496,7 +486,7 @@
496
486
 
497
487
  {
498
488
 
499
- //「名前をつけて保存」処理文
489
+ //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
500
490
 
501
491
  }
502
492
 
@@ -506,7 +496,7 @@
506
496
 
507
497
  {
508
498
 
509
- //「ダウンロードの完了」を閉じる
499
+ //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
510
500
 
511
501
  }
512
502
 

2

質問内容の変更

2018/10/02 00:04

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -20,9 +20,7 @@
20
20
 
21
21
  「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」についてご教授お願い致します。
22
22
 
23
- 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが
23
+ 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが自分のソースに置き換えたときにどう記述すれば出来るのかを単純に教えていただき、そこから理解出来ればと思っています。
24
-
25
- 自分のソースに置き換えたときにどう記述すれば出来るのかをダイレクトに教えていただければと思っています。
26
24
 
27
25
  よろしくお願いします。
28
26
 

1

質問の題名

2018/10/02 00:02

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- C# スコ添削希望
1
+ C# 「エラ処理の記述方法」と「フォムだけは残してそ他処理は終了させる方法」について
test CHANGED
File without changes