質問編集履歴
2
再修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,128 +1,6 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
一つのソリューション内に2つのプロジェクトを作成し、①のプロジェクトから```process.start```を使用して②のプロジェクト(フォーム)を非表示で起動させます。
|
4
|
-
②のプロジェクトには```label```がひとつあり、ある条件でファイルの内容を表示させます。
|
5
|
-
ここまではうまく動いてくれるのですが、ひとつ気づきました。
|
6
|
-
②のプロジェクトが起動した時、①のプロジェクトは、テキストファイル(「~ある条件でファイルの内容を~」に記載した「ファイル」とは別物)に1を書きだし、①のプロジェクトを閉じるときは0を書き出します。このテキストファイルの内容を②のプロジェクトは監視しており、0が書き出された時、②のプロジェクトも終了させます。
|
7
3
|
|
8
|
-
ここで、
|
9
|
-
1.①のプロジェクトから②のプロジェクトが非表示で起動される(テキストファイルに1が書かれる)
|
10
|
-
2.ある条件で②のフォームが表示され、ファイルの内容が②のプロジェクトのlabelに表示される
|
11
|
-
3.①のフォームを閉じる(テキストファイルに0が書かれる)
|
12
|
-
4.②のフォームが閉じられない
|
13
|
-
|
14
|
-
4にあるように、②のフォームが閉じられませんでした。本来であればテキストファイルに0が書かれたのでフォームを閉じたいのですが。。
|
15
|
-
|
16
|
-
この挙動を見て、```process.start```で起動された②のフォームと、ある条件で表示された②のフォームはもしかして別物?と思いました。インスタンスを2つ作ってしまったような、そんな挙動に見えます。
|
17
|
-
上の4でフォームが閉じられるようになるにはどのようにしたらよいのか、アドバイスいただけますでしょうか。
|
18
|
-
|
19
|
-
また、②のフォームが表示されたとき、ずっと処理中のようで、②のフォームを直接×で閉じられないのですが、これは、```FileSystemWatcher```を使用しているために起こっているのでしょうか?
|
20
|
-
|
21
|
-
### 該当のソースコード
|
22
|
-
|
23
|
-
```C#
|
24
|
-
①のプロジェクト
|
25
|
-
//②の起動
|
26
|
-
private void Form1_Load(object sender, EventArgs e)
|
27
|
-
{
|
28
|
-
Process process = new Process();
|
29
|
-
process.StartInfo.UseShellExecute = false;
|
30
|
-
process.StartInfo.FileName = パス;
|
31
|
-
if (process.Start() == true) //起動できたら1書きこむ
|
32
|
-
{
|
33
|
-
using (var sw = new StreamWriter(@パス, false))
|
34
|
-
{
|
35
|
-
sw.WriteLine(1);
|
36
|
-
}
|
37
|
-
}
|
38
|
-
else //起動しなかったら0書きこむ
|
39
|
-
{
|
40
|
-
using (var sw = new StreamWriter(@パス, false))
|
41
|
-
{
|
42
|
-
sw.WriteLine(0);
|
43
|
-
Application.Exit();
|
44
|
-
}
|
45
|
-
}
|
46
|
-
}
|
47
|
-
|
48
|
-
//①を閉じる前にテキストファイルに0を書きこむ(0が書き込まれたら②が閉じる)
|
49
|
-
private void Form1_FormClosing(object sender, FormClosingEventArgs e) //閉じる前
|
50
|
-
{
|
51
|
-
using (FileStream fs = new FileStream(@パス, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
|
52
|
-
{
|
53
|
-
using (StreamWriter sw = new StreamWriter(fs))
|
54
|
-
{
|
55
|
-
sw.WriteLine(0);
|
56
|
-
}
|
57
|
-
}
|
58
|
-
}
|
59
|
-
|
60
|
-
②のプロジェクト
|
61
|
-
private void Form1_Load(object sender, EventArgs e)
|
62
|
-
{
|
63
|
-
WindowState = FormWindowState.Minimized;
|
64
|
-
ShowInTaskbar = false;
|
65
|
-
|
66
|
-
//ファイルが存在する時、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
67
|
-
if (File.Exists(FileList()))
|
68
|
-
{
|
69
|
-
string FileList = FileList();
|
70
|
-
Thread.Sleep(filename());
|
71
|
-
using (var sw = new StreamReader(FileList))
|
72
|
-
{
|
73
|
-
label1.Text = sw.ReadToEnd();
|
74
|
-
WindowState = FormWindowState.Normal;
|
75
|
-
ShowInTaskbar = true;
|
76
|
-
}
|
77
|
-
File.Delete(FileList());
|
78
|
-
}
|
79
|
-
|
80
|
-
//フォルダを監視
|
81
|
-
//フォルダ内のファイルが変更されたら、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
82
|
-
FileSystemWatcher watcher = new FileSystemWatcher();
|
83
|
-
watcher.Path = パス;
|
84
|
-
watcher.Filter = "";
|
85
|
-
watcher.NotifyFilter = NotifyFilters.LastWrite; //変更を監視
|
86
|
-
watcher.IncludeSubdirectories = false;
|
87
|
-
WaitForChangedResult waitForChangedResult = watcher.WaitForChanged(WatcherChangeTypes.All);
|
88
|
-
if (waitForChangedResult.ChangeType == WatcherChangeTypes.Changed)
|
89
|
-
{
|
90
|
-
string FileList = FileList();
|
91
|
-
Thread.Sleep(filename());
|
92
|
-
using (var sw = new StreamReader(FileList()))
|
93
|
-
{
|
94
|
-
label1.Text = sw.ReadToEnd();
|
95
|
-
WindowState = FormWindowState.Normal;
|
96
|
-
ShowInTaskbar = true;
|
97
|
-
File.Delete(FileList());
|
98
|
-
}
|
99
|
-
}
|
100
|
-
}
|
101
|
-
|
102
|
-
//テキストファイルを監視
|
103
|
-
//0が書き出されたら②のプロジェクトを閉じる
|
104
|
-
FileSystemWatcher watcher1 = new FileSystemWatcher();
|
105
|
-
watcher1.Path = パス;
|
106
|
-
watcher1.Filter = "";
|
107
|
-
watcher1.NotifyFilter = NotifyFilters.LastWrite; //変更を監視
|
108
|
-
watcher1.IncludeSubdirectories = false;
|
109
|
-
WaitForChangedResult waitForChangedResult1 = watcher1.WaitForChanged(WatcherChangeTypes.All);
|
110
|
-
if (waitForChangedResult1.ChangeType == WatcherChangeTypes.Changed)
|
111
|
-
{
|
112
|
-
WindowState = FormWindowState.Minimized;
|
113
|
-
ShowInTaskbar = false;
|
114
|
-
using (FileStream fs = new FileStream(@パス, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
115
|
-
{
|
116
|
-
using (var sr = new StreamReader(fs))
|
117
|
-
{
|
118
|
-
if (sr.ReadLine() == "0")
|
119
|
-
{
|
120
|
-
this.Close();
|
121
|
-
}
|
122
|
-
}
|
123
|
-
}
|
124
|
-
}
|
125
|
-
}
|
126
4
|
```
|
127
5
|
|
128
6
|
### 補足情報(FW/ツールのバージョンなど)
|
1
詳細の記載
title
CHANGED
File without changes
|
body
CHANGED
@@ -22,19 +22,20 @@
|
|
22
22
|
|
23
23
|
```C#
|
24
24
|
①のプロジェクト
|
25
|
+
//②の起動
|
25
26
|
private void Form1_Load(object sender, EventArgs e)
|
26
27
|
{
|
27
28
|
Process process = new Process();
|
28
29
|
process.StartInfo.UseShellExecute = false;
|
29
30
|
process.StartInfo.FileName = パス;
|
30
|
-
if (process.Start() == true)
|
31
|
+
if (process.Start() == true) //起動できたら1書きこむ
|
31
32
|
{
|
32
33
|
using (var sw = new StreamWriter(@パス, false))
|
33
34
|
{
|
34
35
|
sw.WriteLine(1);
|
35
36
|
}
|
36
37
|
}
|
37
|
-
else
|
38
|
+
else //起動しなかったら0書きこむ
|
38
39
|
{
|
39
40
|
using (var sw = new StreamWriter(@パス, false))
|
40
41
|
{
|
@@ -44,6 +45,7 @@
|
|
44
45
|
}
|
45
46
|
}
|
46
47
|
|
48
|
+
//①を閉じる前にテキストファイルに0を書きこむ(0が書き込まれたら②が閉じる)
|
47
49
|
private void Form1_FormClosing(object sender, FormClosingEventArgs e) //閉じる前
|
48
50
|
{
|
49
51
|
using (FileStream fs = new FileStream(@パス, FileMode.Create, FileAccess.Write, FileShare.ReadWrite))
|
@@ -61,7 +63,8 @@
|
|
61
63
|
WindowState = FormWindowState.Minimized;
|
62
64
|
ShowInTaskbar = false;
|
63
65
|
|
66
|
+
//ファイルが存在する時、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
64
|
-
if (File.Exists(FileList()))
|
67
|
+
if (File.Exists(FileList()))
|
65
68
|
{
|
66
69
|
string FileList = FileList();
|
67
70
|
Thread.Sleep(filename());
|
@@ -75,6 +78,7 @@
|
|
75
78
|
}
|
76
79
|
|
77
80
|
//フォルダを監視
|
81
|
+
//フォルダ内のファイルが変更されたら、下の変数FileList(フォルダ内のファイルを昇順でSortし、[0]位置にあるファイル一つを取得しています)に格納されたファイルの順番を確認し内容を表示する
|
78
82
|
FileSystemWatcher watcher = new FileSystemWatcher();
|
79
83
|
watcher.Path = パス;
|
80
84
|
watcher.Filter = "";
|
@@ -96,6 +100,7 @@
|
|
96
100
|
}
|
97
101
|
|
98
102
|
//テキストファイルを監視
|
103
|
+
//0が書き出されたら②のプロジェクトを閉じる
|
99
104
|
FileSystemWatcher watcher1 = new FileSystemWatcher();
|
100
105
|
watcher1.Path = パス;
|
101
106
|
watcher1.Filter = "";
|