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

質問編集履歴

2

再修正

2020/11/13 02:28

投稿

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

詳細の記載

2020/11/13 02:28

投稿

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