質問編集履歴
2
再修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,251 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
一つのソリューション内に2つのプロジェクトを作成し、①のプロジェクトから```process.start```を使用して②のプロジェクト(フォーム)を非表示で起動させます。
|
6
5
|
|
7
|
-
②のプロジェクトには```label```がひとつあり、ある条件でファイルの内容を表示させます。
|
8
|
-
|
9
|
-
ここまではうまく動いてくれるのですが、ひとつ気づきました。
|
10
|
-
|
11
|
-
②のプロジェクトが起動した時、①のプロジェクトは、テキストファイル(「~ある条件でファイルの内容を~」に記載した「ファイル」とは別物)に1を書きだし、①のプロジェクトを閉じるときは0を書き出します。このテキストファイルの内容を②のプロジェクトは監視しており、0が書き出された時、②のプロジェクトも終了させます。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
ここで、
|
16
|
-
|
17
|
-
1.①のプロジェクトから②のプロジェクトが非表示で起動される(テキストファイルに1が書かれる)
|
18
|
-
|
19
|
-
2.ある条件で②のフォームが表示され、ファイルの内容が②のプロジェクトのlabelに表示される
|
20
|
-
|
21
|
-
3.①のフォームを閉じる(テキストファイルに0が書かれる)
|
22
|
-
|
23
|
-
4.②のフォームが閉じられない
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
4にあるように、②のフォームが閉じられませんでした。本来であればテキストファイルに0が書かれたのでフォームを閉じたいのですが。。
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
この挙動を見て、```process.start```で起動された②のフォームと、ある条件で表示された②のフォームはもしかして別物?と思いました。インスタンスを2つ作ってしまったような、そんな挙動に見えます。
|
32
|
-
|
33
|
-
上の4でフォームが閉じられるようになるにはどのようにしたらよいのか、アドバイスいただけますでしょうか。
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
また、②のフォームが表示されたとき、ずっと処理中のようで、②のフォームを直接×で閉じられないのですが、これは、```FileSystemWatcher```を使用しているために起こっているのでしょうか?
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
### 該当のソースコード
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
```C#
|
46
|
-
|
47
|
-
①のプロジェクト
|
48
|
-
|
49
|
-
//②の起動
|
50
|
-
|
51
|
-
private void Form1_Load(object sender, EventArgs e)
|
52
|
-
|
53
|
-
{
|
54
|
-
|
55
|
-
Process process = new Process();
|
56
|
-
|
57
|
-
process.StartInfo.UseShellExecute = false;
|
58
|
-
|
59
|
-
process.StartInfo.FileName = パス;
|
60
|
-
|
61
|
-
if (process.Start() == true) //起動できたら1書きこむ
|
62
|
-
|
63
|
-
{
|
64
|
-
|
65
|
-
using (var sw = new StreamWriter(@パス, false))
|
66
|
-
|
67
|
-
{
|
68
|
-
|
69
|
-
sw.WriteLine(1);
|
70
|
-
|
71
|
-
}
|
72
|
-
|
73
|
-
}
|
74
|
-
|
75
|
-
else //起動しなかったら0書きこむ
|
76
|
-
|
77
|
-
{
|
78
|
-
|
79
|
-
using (var sw = new StreamWriter(@パス, false))
|
80
|
-
|
81
|
-
{
|
82
|
-
|
83
|
-
sw.WriteLine(0);
|
84
|
-
|
85
|
-
Application.Exit();
|
86
|
-
|
87
|
-
}
|
88
|
-
|
89
|
-
}
|
90
|
-
|
91
|
-
}
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
//①を閉じる前にテキストファイルに0を書きこむ(0が書き込まれたら②が閉じる)
|
96
|
-
|
97
|
-
private void Form1_FormClosing(object sender, FormClosingEventArgs e) //閉じる前
|
98
|
-
|
99
|
-
{
|
100
|
-
|
101
|
-
using (FileStream fs = new FileStream(@パス, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
|
102
|
-
|
103
|
-
{
|
104
|
-
|
105
|
-
using (StreamWriter sw = new StreamWriter(fs))
|
106
|
-
|
107
|
-
{
|
108
|
-
|
109
|
-
sw.WriteLine(0);
|
110
|
-
|
111
|
-
}
|
112
|
-
|
113
|
-
}
|
114
|
-
|
115
|
-
}
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
②のプロジェクト
|
120
|
-
|
121
|
-
private void Form1_Load(object sender, EventArgs e)
|
122
|
-
|
123
|
-
{
|
124
|
-
|
125
|
-
WindowState = FormWindowState.Minimized;
|
126
|
-
|
127
|
-
ShowInTaskbar = false;
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
//ファイルが存在する時、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
132
|
-
|
133
|
-
if (File.Exists(FileList()))
|
134
|
-
|
135
|
-
{
|
136
|
-
|
137
|
-
string FileList = FileList();
|
138
|
-
|
139
|
-
Thread.Sleep(filename());
|
140
|
-
|
141
|
-
using (var sw = new StreamReader(FileList))
|
142
|
-
|
143
|
-
{
|
144
|
-
|
145
|
-
label1.Text = sw.ReadToEnd();
|
146
|
-
|
147
|
-
WindowState = FormWindowState.Normal;
|
148
|
-
|
149
|
-
ShowInTaskbar = true;
|
150
|
-
|
151
|
-
}
|
152
|
-
|
153
|
-
File.Delete(FileList());
|
154
|
-
|
155
|
-
}
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
//フォルダを監視
|
160
|
-
|
161
|
-
//フォルダ内のファイルが変更されたら、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
162
|
-
|
163
|
-
FileSystemWatcher watcher = new FileSystemWatcher();
|
164
|
-
|
165
|
-
watcher.Path = パス;
|
166
|
-
|
167
|
-
watcher.Filter = "";
|
168
|
-
|
169
|
-
watcher.NotifyFilter = NotifyFilters.LastWrite; //変更を監視
|
170
|
-
|
171
|
-
watcher.IncludeSubdirectories = false;
|
172
|
-
|
173
|
-
WaitForChangedResult waitForChangedResult = watcher.WaitForChanged(WatcherChangeTypes.All);
|
174
|
-
|
175
|
-
if (waitForChangedResult.ChangeType == WatcherChangeTypes.Changed)
|
176
|
-
|
177
|
-
{
|
178
|
-
|
179
|
-
string FileList = FileList();
|
180
|
-
|
181
|
-
Thread.Sleep(filename());
|
182
|
-
|
183
|
-
using (var sw = new StreamReader(FileList()))
|
184
|
-
|
185
|
-
{
|
186
|
-
|
187
|
-
label1.Text = sw.ReadToEnd();
|
188
|
-
|
189
|
-
WindowState = FormWindowState.Normal;
|
190
|
-
|
191
|
-
ShowInTaskbar = true;
|
192
|
-
|
193
|
-
File.Delete(FileList());
|
194
|
-
|
195
|
-
}
|
196
|
-
|
197
|
-
}
|
198
|
-
|
199
|
-
}
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
//テキストファイルを監視
|
204
|
-
|
205
|
-
//0が書き出されたら②のプロジェクトを閉じる
|
206
|
-
|
207
|
-
FileSystemWatcher watcher1 = new FileSystemWatcher();
|
208
|
-
|
209
|
-
watcher1.Path = パス;
|
210
|
-
|
211
|
-
watcher1.Filter = "";
|
212
|
-
|
213
|
-
watcher1.NotifyFilter = NotifyFilters.LastWrite; //変更を監視
|
214
|
-
|
215
|
-
watcher1.IncludeSubdirectories = false;
|
216
|
-
|
217
|
-
WaitForChangedResult waitForChangedResult1 = watcher1.WaitForChanged(WatcherChangeTypes.All);
|
218
|
-
|
219
|
-
if (waitForChangedResult1.ChangeType == WatcherChangeTypes.Changed)
|
220
|
-
|
221
|
-
{
|
222
|
-
|
223
|
-
WindowState = FormWindowState.Minimized;
|
224
|
-
|
225
|
-
ShowInTaskbar = false;
|
226
|
-
|
227
|
-
using (FileStream fs = new FileStream(@パス, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
228
|
-
|
229
|
-
{
|
230
|
-
|
231
|
-
using (var sr = new StreamReader(fs))
|
232
|
-
|
233
|
-
{
|
234
|
-
|
235
|
-
if (sr.ReadLine() == "0")
|
236
|
-
|
237
|
-
{
|
238
|
-
|
239
|
-
this.Close();
|
240
|
-
|
241
|
-
}
|
242
|
-
|
243
|
-
}
|
244
|
-
|
245
|
-
}
|
246
|
-
|
247
|
-
}
|
248
|
-
|
249
|
-
}
|
250
6
|
|
251
7
|
```
|
252
8
|
|
1
詳細の記載
test
CHANGED
File without changes
|
test
CHANGED
@@ -46,6 +46,8 @@
|
|
46
46
|
|
47
47
|
①のプロジェクト
|
48
48
|
|
49
|
+
//②の起動
|
50
|
+
|
49
51
|
private void Form1_Load(object sender, EventArgs e)
|
50
52
|
|
51
53
|
{
|
@@ -56,7 +58,7 @@
|
|
56
58
|
|
57
59
|
process.StartInfo.FileName = パス;
|
58
60
|
|
59
|
-
if (process.Start() == true)
|
61
|
+
if (process.Start() == true) //起動できたら1書きこむ
|
60
62
|
|
61
63
|
{
|
62
64
|
|
@@ -70,7 +72,7 @@
|
|
70
72
|
|
71
73
|
}
|
72
74
|
|
73
|
-
else
|
75
|
+
else //起動しなかったら0書きこむ
|
74
76
|
|
75
77
|
{
|
76
78
|
|
@@ -90,6 +92,8 @@
|
|
90
92
|
|
91
93
|
|
92
94
|
|
95
|
+
//①を閉じる前にテキストファイルに0を書きこむ(0が書き込まれたら②が閉じる)
|
96
|
+
|
93
97
|
private void Form1_FormClosing(object sender, FormClosingEventArgs e) //閉じる前
|
94
98
|
|
95
99
|
{
|
@@ -124,7 +128,9 @@
|
|
124
128
|
|
125
129
|
|
126
130
|
|
131
|
+
//ファイルが存在する時、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
132
|
+
|
127
|
-
if (File.Exists(FileList()))
|
133
|
+
if (File.Exists(FileList()))
|
128
134
|
|
129
135
|
{
|
130
136
|
|
@@ -152,6 +158,8 @@
|
|
152
158
|
|
153
159
|
//フォルダを監視
|
154
160
|
|
161
|
+
//フォルダ内のファイルが変更されたら、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
162
|
+
|
155
163
|
FileSystemWatcher watcher = new FileSystemWatcher();
|
156
164
|
|
157
165
|
watcher.Path = パス;
|
@@ -194,6 +202,8 @@
|
|
194
202
|
|
195
203
|
//テキストファイルを監視
|
196
204
|
|
205
|
+
//0が書き出されたら②のプロジェクトを閉じる
|
206
|
+
|
197
207
|
FileSystemWatcher watcher1 = new FileSystemWatcher();
|
198
208
|
|
199
209
|
watcher1.Path = パス;
|