質問編集履歴

2

再修正

2020/11/13 02:28

投稿

退会済みユーザー
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

詳細の記載

2020/11/13 02:28

投稿

退会済みユーザー
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 = パス;