teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

8

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

2018/11/19 04:20

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- > ```````````````````````````````````````````````````````````````````````````````````````ここ言語を入力 ここ
1
+ C# 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」ついて
body CHANGED
@@ -1,59 +1,251 @@
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
- ```
1
+ visualstudio2017で自動ダウンロードツール作成しています。
2
+ ここで質問させていただき、参考にしつつ初めて自身で作成したものです。
3
+ 流れは、下記になります。
4
+ ①Pingで疎通確認(YES→② NO→①繰り返す)
5
+ ②疎通確認出来ればサイトにログイン(MyClock1-4を同時に動作)
6
+ ②ログインしてからダウンロードURL開き、ダイアログ等の処理を行う(MyClock1-4を同時に動作)
7
+ ③ ①と②を指定時間ごとに繰り返し(MyClock1-4を同時に動作)
8
+ ※どの処理途中でも停止ボタン押したい(button_Click2)フォームだけは残してその他処理は終了させたい
9
+ 今回
10
+ 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」ついてご教授お願い致します。
11
+ 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが自分のソースに置き換えたときにどう記述すれば出来るのかを下記ソースの場合で教えていただき、そこから理解出来ればと思っています。
12
+ よろしくお願いします。
13
+ ```C#
14
+ using System;
15
+ using System.Collections.Generic;
16
+ using System.ComponentModel;
17
+ using System.Diagnostics;
18
+ using System.Net.NetworkInformation;
19
+ using System.Runtime.InteropServices;
20
+ using System.Threading;
21
+ using System.Threading.Tasks;
22
+ using System.Windows.Forms;
23
+ namespace WindowsFormsApp1
24
+ {
25
+ public partial class Form1 : Form
26
+ {
27
+ //宣言文
28
+ [DllImport("user32.dll")]
29
+ static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
30
+ [DllImport("user32.dll")]
31
+ static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfeter, string lpszClass, string lpszWindow);
32
+ [DllImport("user32.dll")]
33
+ static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, String lParam);
34
+ [DllImport("user32.dll")]
35
+ static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
36
+ // キャンセレーショントークンソース
37
+ private CancellationTokenSource CancellationTokenSource;
38
+ public Form1()
39
+ {
40
+ InitializeComponent();
41
+ button1.Enabled = true;
42
+ button2.Enabled = false;
43
+ }
44
+
45
+ public void Timers(EventHandler eventHandler)//3秒ごとに動くタイマー
46
+ {
47
+ var timer = new System.Windows.Forms.Timer();
48
+ timer.Tick += new EventHandler(eventHandler);
49
+ timer.Interval = 1000;
50
+ timer.Start();
51
+ }
52
+ public void loop(EventHandler eventHandler)//numericUpDown1 * 60秒 でループするタイマー
53
+ {
54
+ int intVal = Decimal.ToInt32(numericUpDown1.Value);
55
+ var timer = new System.Windows.Forms.Timer();
56
+ timer.Tick += new EventHandler(eventHandler);
57
+ timer.Interval = intVal * 60000;
58
+ timer.Start();
59
+ }
60
+ private int status;
61
+ private void timer_Handler(object sender, EventArgs e)//MyClockを順番に動作させる
62
+ {
63
+ switch (status)
64
+ {
65
+ case 1:
66
+ MyClock1();
67
+ status = 2;
68
+ break;
69
+ case 2:
70
+ MyClock2();
71
+ status = 3;
72
+ break;
73
+ case 3:
74
+ MyClock3();
75
+ status = 4;
76
+ break;
77
+ case 4:
78
+ MyClock4();
79
+ status = 0;
80
+ break;
81
+ default:
82
+ status = 1;
83
+ break;
84
+ }
85
+ }
86
+ //メインの処理
87
+ public void button1_Click(object sender, EventArgs e)
88
+ {
89
+ button1.Enabled = false;
90
+ button2.Enabled = true;
91
+ this.CancellationTokenSource = new CancellationTokenSource();
92
+ // 処理を開始します(キャンセルトークンを渡す必要があります)
93
+ First_run(CancellationTokenSource.Token);
94
+ loop(Main_loop);
95
+ }
96
+ public async Task Ping_com(CancellationToken token)
97
+ {
98
+ await Task.Delay(1000);
99
+ string address = textBox0.Text;
100
+ System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
101
+ //結果を表示
102
+ while (true)
103
+ {
104
+ label1.Text = "\n通信確認中";
105
+ Task.Delay(1000).Wait();
106
+ label1.Refresh();
107
+ Ping ins_Ping = new Ping();
108
+ string host = textBox0.Text;
109
+ int timeout = 1000;
110
+ PingReply ins_PingReply = ins_Ping.Send(host, timeout);
111
+ if (ins_PingReply.Status == IPStatus.Success)
112
+ {
113
+ label1.Text = "\n通信成功";
114
+ label1.Refresh();
115
+ Task.Delay(5000).Wait();
116
+ // ループ終了
117
+ break;
118
+ }
119
+ else
120
+ {
121
+ label1.Text = "\n通信失敗";
122
+ label1.Refresh();
123
+ if (token.IsCancellationRequested)
124
+ {
125
+ // キャンセル処理
126
+ Debug.WriteLine("comをキャンセルします...");
127
+ // ループ終了
128
+
129
+ }
130
+ await Task.Delay(1000);
131
+ }
132
+ }
133
+ }
134
+ public async Task First_run(CancellationToken token)
135
+ {
136
+ try
137
+ {
138
+         //MyClock1-4のループ
139
+ Timers(timer_Handler);
140
+ status = 1;
141
+         //疎通確認
142
+ await Ping_com(token);
143
+ label1.Text = "接続中";
144
+ label1.Refresh();
145
+ //特定のURLに接続
146
+ webBrowser1.Visible = true;
147
+ webBrowser1.Navigate("https://");
148
+ //ページの読み込み完了まで待つ
149
+ OpenWebWait();
150
+ //1番目フレーム内のNameを取得
151
+ HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
152
+ HtmlElementCollection elements = iframe.Document.All;
153
+ HtmlElement id = elements.GetElementsByName("userName")[0];
154
+ HtmlElement pw = elements.GetElementsByName("pwd")[0];
155
+ //ID・passを入力
156
+ id.InnerText = textBox1.Text;
157
+ pw.InnerText = textBox2.Text;
158
+ //Submitボタンをクリック
159
+ HtmlElement login = elements.GetElementsByName("Submit")[0];
160
+ login.InvokeMember("click");
161
+ //ダウンロードページを開く
162
+ webBrowser2.Visible = true;
163
+ webBrowser2.Navigate("https://");
164
+ label1.Text = "\nダウンロード処理中";
165
+ }
166
+ catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
167
+ {
168
+ Task.Delay(5000).Wait();
169
+ First_run(CancellationTokenSource.Token);
170
+ }
171
+ }
172
+ private void Main_loop(object sender, EventArgs e)
173
+ {
174
+ try
175
+ {
176
+ //特定のURLに接続
177
+ webBrowser1.Visible = true;
178
+ webBrowser1.Navigate("https://");
179
+ //ページの読み込み完了まで待つ
180
+ OpenWebWait();
181
+ //1番目フレーム内のNameを取得
182
+ HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
183
+ HtmlElementCollection elements = iframe.Document.All;
184
+ HtmlElement id = elements.GetElementsByName("userName")[0];
185
+ HtmlElement pw = elements.GetElementsByName("pwd")[0];
186
+ //ID・passを入力
187
+ id.InnerText = textBox1.Text;
188
+ pw.InnerText = textBox2.Text;
189
+ //Submitボタンをクリック
190
+ HtmlElement login = elements.GetElementsByName("Submit")[0];
191
+ login.InvokeMember("click");
192
+ //ダウンロードページを開く
193
+ webBrowser2.Visible = true;
194
+ webBrowser2.Navigate("https://");
195
+ }
196
+ catch (Exception w) when (w is ObjectDisposedException || w is InvalidOperationException || w is ArgumentOutOfRangeException)
197
+ {
198
+ Task.Delay(1000).Wait();
199
+ }
200
+ }
201
+
202
+ void MyClock1()
203
+ {
204
+ //「セキュリティの警告」ダイアログがもしあればを承認する文
205
+ }
206
+ void MyClock2()
207
+ {
208
+ //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
209
+ }
210
+ void MyClock3()
211
+ {
212
+ //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
213
+ }
214
+
215
+ void MyClock4()
216
+ {
217
+ //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
218
+ }
219
+ private void button2_Click(object sender, EventArgs e)
220
+ {
221
+ //アプリケーションを終了させる(フォームのみ残してその他処理は終了させたい)
222
+ backgroundWorker1.RunWorkerAsync();
223
+ }
224
+ private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
225
+     {
226
+ Application.Exit();
227
+ }
228
+ private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
229
+ {
230
+ Application.Exit();
231
+ }
232
+ public bool OpenWebWait()
233
+ {
234
+ try
235
+ {
236
+ //読み込み完了まで待つ
237
+ while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
238
+ {
239
+ //無処理
240
+ System.Windows.Forms.Application.DoEvents();
241
+ System.Threading.Thread.Sleep(300);
242
+ }
243
+ return true;
244
+ }
245
+ catch (Exception ex)
246
+ {
247
+ return false;
248
+ }
249
+ }
250
+ }
251
+ }

7

dd

2018/11/19 04:20

投稿

退会済みユーザー
title CHANGED
@@ -1,1 +1,1 @@
1
- C# 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」ついて
1
+ > ```````````````````````````````````````````````````````````````````````````````````````ここ言語を入力 ここ
body CHANGED
@@ -1,279 +1,59 @@
1
- visualstudio2017で自動ダウンロードツール作成しています。
2
- ここで質問をさせていただき、参考しつつ初めて自身で作成したものです。
3
- 流れは、下記になります。
4
- ①Pingで疎通確認(YES→② NO→①繰り返す)
5
- ②疎通確認出来ればサイトにログイン(MyClock1-4を同時に動作)
6
- ②ログインしてからダウンロードURLを開き、ダイアログ等の処理を行う(MyClock1-4を同時動作)
7
- ③ ①と②を指定時間ごとに繰り返し(MyClock1-4を同時に動作)
8
- ※どの処理途中でも停止ボタン押したい(button_Click2)フォームだけは残してその他処理は終了させたい
9
-
10
- 今回
11
- 「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」についてご教授お願い致します。
12
- 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくうすればいいんだろうなと掴めつつはありますが自分のソース置き換えたときにどう記述すれば出来るのか下記ソースの場合で教えていただき、そこから理解出来ればと思っています。
13
- よろしくお願いします。
14
-
15
- ```C#
16
- using System;
17
- using System.Collections.Generic;
18
- using System.ComponentModel;
19
- using System.Diagnostics;
20
- using System.Net.NetworkInformation;
21
- using System.Runtime.InteropServices;
22
- using System.Threading;
23
- using System.Threading.Tasks;
24
- using System.Windows.Forms;
25
-
26
- namespace WindowsFormsApp1
27
- {
28
- public partial class Form1 : Form
29
- {
30
- //宣
31
- [DllImport("user32.dll")]
32
- static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
33
- [DllImport("user32.dll")]
34
- static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfeter, string lpszClass, string lpszWindow);
35
- [DllImport("user32.dll")]
36
- static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, String lParam);
37
- [DllImport("user32.dll")]
38
- static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
39
- // キャンセレーショントークンソース
40
- private CancellationTokenSource CancellationTokenSource;
41
- public Form1()
42
- {
43
- InitializeComponent();
44
- button1.Enabled = true;
45
- button2.Enabled = false;
46
- }
47
-
48
- public void Timers(EventHandler eventHandler)//3秒ごと動くタイマー
49
- {
50
- var timer = new System.Windows.Forms.Timer();
51
- timer.Tick += new EventHandler(eventHandler);
52
- timer.Interval = 1000;
53
- timer.Start();
54
-
55
- }
56
- public void loop(EventHandler eventHandler)//numericUpDown1 * 60秒 でループするタイマー
57
- {
58
- int intVal = Decimal.ToInt32(numericUpDown1.Value);
59
- var timer = new System.Windows.Forms.Timer();
60
- timer.Tick += new EventHandler(eventHandler);
61
- timer.Interval = intVal * 60000;
62
- timer.Start();
63
- }
64
- private int status;
65
- private void timer_Handler(object sender, EventArgs e)//MyClockを順番に動作させる
66
- {
67
- switch (status)
68
- {
69
- case 1:
70
- MyClock1();
71
- status = 2;
72
- break;
73
- case 2:
74
- MyClock2();
75
- status = 3;
76
- break;
77
- case 3:
78
- MyClock3();
79
- status = 4;
80
- break;
81
- case 4:
82
- MyClock4();
83
- status = 0;
84
- break;
85
- default:
86
- status = 1;
87
- break;
88
- }
89
- }
90
- //メインの処理
91
- public void button1_Click(object sender, EventArgs e)
92
- {
93
- button1.Enabled = false;
94
- button2.Enabled = true;
95
-
96
- this.CancellationTokenSource = new CancellationTokenSource();
97
- // 処理を開始します(キャンセルトークンを渡す必要があります)
98
- First_run(CancellationTokenSource.Token);
99
- loop(Main_loop);
100
-
101
- }
102
- public async Task Ping_com(CancellationToken token)
103
- {
104
- await Task.Delay(1000);
105
- string address = textBox0.Text;
106
-
107
- System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo();
108
-
109
- //結果を表示
110
- while (true)
111
- {
112
- label1.Text = "\n通信確認中";
113
- Task.Delay(1000).Wait();
114
- label1.Refresh();
115
- Ping ins_Ping = new Ping();
116
- string host = textBox0.Text;
117
- int timeout = 1000;
118
- PingReply ins_PingReply = ins_Ping.Send(host, timeout);
119
- if (ins_PingReply.Status == IPStatus.Success)
120
- {
121
-
122
- label1.Text = "\n通信成功";
123
- label1.Refresh();
124
- Task.Delay(5000).Wait();
125
- // ループ終了
126
- break;
127
- }
128
- else
129
- {
130
- label1.Text = "\n通信失敗";
131
- label1.Refresh();
132
- if (token.IsCancellationRequested)
133
- {
134
- // キャンセル処理
135
- Debug.WriteLine("comをキャンセルします...");
136
-
137
- // ループ終了
138
-
139
- }
140
- await Task.Delay(1000);
141
- }
142
- }
143
-
144
- }
145
- public async Task First_run(CancellationToken token)
146
- {
147
- try
148
- {
149
-         //MyClock1-4のループ
150
- Timers(timer_Handler);
151
- status = 1;
152
-
153
-         //疎通確認
154
- await Ping_com(token);
155
-
156
-
157
- label1.Text = "接続中";
158
- label1.Refresh();
159
- //特定のURLに接続
160
- webBrowser1.Visible = true;
161
- webBrowser1.Navigate("https://");
162
-
163
- //ページの読み込み完了まで待つ
164
- OpenWebWait();
165
-
166
- //1番目フレーム内のNameを取得
167
- HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
168
- HtmlElementCollection elements = iframe.Document.All;
169
- HtmlElement id = elements.GetElementsByName("userName")[0];
170
- HtmlElement pw = elements.GetElementsByName("pwd")[0];
171
- //ID・passを入力
172
- id.InnerText = textBox1.Text;
173
- pw.InnerText = textBox2.Text;
174
-
175
- //Submitボタンをクリック
176
- HtmlElement login = elements.GetElementsByName("Submit")[0];
177
- login.InvokeMember("click");
178
-
179
-
180
- //ダウンロードページを開く
181
- webBrowser2.Visible = true;
182
- webBrowser2.Navigate("https://");
183
- label1.Text = "\nダウンロード処理中";
184
- }
185
- catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
186
- {
187
- Task.Delay(5000).Wait();
188
- First_run(CancellationTokenSource.Token);
189
-
190
- }
191
- }
192
- private void Main_loop(object sender, EventArgs e)
193
- {
194
- try
195
- {
196
-
197
- //特定のURLに接続
198
- webBrowser1.Visible = true;
199
- webBrowser1.Navigate("https://");
200
-
201
- //ページの読み込み完了まで待つ
202
- OpenWebWait();
203
-
204
- //1番目フレーム内のNameを取得
205
- HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
206
- HtmlElementCollection elements = iframe.Document.All;
207
- HtmlElement id = elements.GetElementsByName("userName")[0];
208
- HtmlElement pw = elements.GetElementsByName("pwd")[0];
209
- //ID・passを入力
210
- id.InnerText = textBox1.Text;
211
- pw.InnerText = textBox2.Text;
212
- //Submitボタンをクリック
213
- HtmlElement login = elements.GetElementsByName("Submit")[0];
214
- login.InvokeMember("click");
215
-
216
- //ダウンロードページを開く
217
- webBrowser2.Visible = true;
218
- webBrowser2.Navigate("https://");
219
- }
220
- catch (Exception w) when (w is ObjectDisposedException || w is InvalidOperationException || w is ArgumentOutOfRangeException)
221
- {
222
- Task.Delay(1000).Wait();
223
- }
224
- }
225
-
226
- void MyClock1()
227
- {
228
- //「セキュリティの警告」ダイアログがもしあればを承認する文
229
- }
230
- void MyClock2()
231
- {
232
- //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
233
- }
234
- void MyClock3()
235
- {
236
- //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
237
- }
238
-
239
- void MyClock4()
240
- {
241
- //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
242
- }
243
- private void button2_Click(object sender, EventArgs e)
244
- {
245
- //アプリケーションを終了させる(フォームのみ残してその他処理は終了させたい)
246
- backgroundWorker1.RunWorkerAsync();
247
- }
248
- private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
249
-     {
250
- Application.Exit();
251
- }
252
-
253
- private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
254
- {
255
- Application.Exit();
256
- }
257
- public bool OpenWebWait()
258
- {
259
- try
260
- {
261
- //読み込み完了まで待つ
262
- while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
263
- {
264
- //無処理
265
- System.Windows.Forms.Application.DoEvents();
266
- System.Threading.Thread.Sleep(300);
267
- }
268
-
269
- return true;
270
- }
271
- catch (Exception ex)
272
- {
273
- return false;
274
- }
275
- }
276
- }
277
- }
278
-
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
+ 引用テキスト
279
59
  ```

6

ソースの変更

2018/10/04 04:24

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -161,12 +161,7 @@
161
161
  webBrowser1.Navigate("https://");
162
162
 
163
163
  //ページの読み込み完了まで待つ
164
- while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
165
- {
166
- //無処理
164
+ OpenWebWait();
167
- System.Windows.Forms.Application.DoEvents();
168
- System.Threading.Thread.Sleep(100);
169
- }
170
165
 
171
166
  //1番目フレーム内のNameを取得
172
167
  HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
@@ -204,12 +199,8 @@
204
199
  webBrowser1.Navigate("https://");
205
200
 
206
201
  //ページの読み込み完了まで待つ
207
- while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
208
- {
209
- //無処理
202
+ OpenWebWait();
210
- System.Windows.Forms.Application.DoEvents();
203
+
211
- System.Threading.Thread.Sleep(100);
212
- }
213
204
  //1番目フレーム内のNameを取得
214
205
  HtmlWindow iframe = webBrowser1.Document.Window.Frames[0];
215
206
  HtmlElementCollection elements = iframe.Document.All;
@@ -263,6 +254,25 @@
263
254
  {
264
255
  Application.Exit();
265
256
  }
257
+ public bool OpenWebWait()
258
+ {
259
+ try
260
+ {
261
+ //読み込み完了まで待つ
262
+ while (webBrowser1.IsBusy || webBrowser1.ReadyState != WebBrowserReadyState.Complete)
263
+ {
264
+ //無処理
265
+ System.Windows.Forms.Application.DoEvents();
266
+ System.Threading.Thread.Sleep(300);
267
+ }
268
+
269
+ return true;
270
+ }
271
+ catch (Exception ex)
272
+ {
273
+ return false;
274
+ }
275
+ }
266
276
  }
267
277
  }
268
278
 

5

変更

2018/10/03 23:57

投稿

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

4

変更

2018/10/02 00:11

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -146,9 +146,11 @@
146
146
  {
147
147
  try
148
148
  {
149
+         //MyClock1-4のループ
149
150
  Timers(timer_Handler);
150
151
  status = 1;
151
152
 
153
+         //疎通確認
152
154
  await Ping_com(token);
153
155
 
154
156
 
@@ -179,8 +181,6 @@
179
181
  HtmlElement login = elements.GetElementsByName("Submit")[0];
180
182
  login.InvokeMember("click");
181
183
 
182
- //タイマー2を設定
183
- //Timers(MyClock2);
184
184
 
185
185
  //ダウンロードページを開く
186
186
  webBrowser2.Visible = true;
@@ -256,7 +256,7 @@
256
256
  }
257
257
  private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
258
258
      {
259
- //Application.Exit();
259
+ Application.Exit();
260
260
  }
261
261
 
262
262
  private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)

3

質問の変更

2018/10/02 00:08

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -155,7 +155,6 @@
155
155
  label1.Text = "接続中";
156
156
  label1.Refresh();
157
157
  //特定のURLに接続
158
- //ブラウザのサイズを変更する
159
158
  webBrowser1.Visible = true;
160
159
  webBrowser1.Navigate("https://");
161
160
 
@@ -187,10 +186,6 @@
187
186
  webBrowser2.Visible = true;
188
187
  webBrowser2.Navigate("https://");
189
188
  label1.Text = "\nダウンロード処理中";
190
- //タイマー3を設定
191
- //Timers(MyClock3);
192
-
193
- //Timers(MyClock4);
194
189
  }
195
190
  catch (Exception e) when (e is ObjectDisposedException || e is InvalidOperationException || e is System.ArgumentOutOfRangeException)
196
191
  {
@@ -239,20 +234,20 @@
239
234
 
240
235
  void MyClock1()
241
236
  {
242
- //「セキュリティの警告」を承認する文
237
+ //「セキュリティの警告」ダイアログがもしあればを承認する文
243
238
  }
244
239
  void MyClock2()
245
240
  {
246
- //「ファイルのダウンロード」保存ボタンを押す文
241
+ //「ファイルのダウンロード」ダイアログがもしあれば保存ボタンを押す文
247
242
  }
248
243
  void MyClock3()
249
244
  {
250
- //「名前をつけて保存」処理文
245
+ //「名前をつけて保存」ダイアログがもしあればダウンロードを行う処理文
251
246
  }
252
247
 
253
248
  void MyClock4()
254
249
  {
255
- //「ダウンロードの完了」を閉じる
250
+ //「ダウンロードの完了」ダイアログがもしあればを閉じる処理文
256
251
  }
257
252
  private void button2_Click(object sender, EventArgs e)
258
253
  {

2

質問内容の変更

2018/10/02 00:04

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -9,8 +9,7 @@
9
9
 
10
10
  今回
11
11
  「エラー処理の記述方法」と「フォームだけは残してその他処理は終了させる方法」についてご教授お願い致します。
12
- 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが
12
+ 「フォームだけは残してその他処理は終了させる方法」について質問して、なんとなくこうすればいいんだろうなと掴めつつはありますが自分のソースに置き換えたときにどう記述すれば出来るのかを単純に教えていただき、そこから理解出来ればと思っています。
13
- 自分のソースに置き換えたときにどう記述すれば出来るのかをダイレクトに教えていただければと思っています。
14
13
  よろしくお願いします。
15
14
 
16
15
  ```C#

1

質問の題名

2018/10/02 00:02

投稿

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