デバッグ用のコンソールを起動できる Windows フォーム アプリがあります。アプリでは、メニューをクリックして、CSV ファイルを読み取り、コンソールに書き込みます。これを行う関数は以下です。
protected void menuRead_Click(object sender, EventArgs e)
{
// ... functionality to load CSV files
System.IO.Stream inputDataFile = null;
OpenFileDialog fd = new OpenFileDialog();
fd.InitialDirectory = "c:\\";
fd.Filter = "csv files (*.csv)|*.csv|All files (*.*)|*.*";
fd.FilterIndex = 1;
fd.RestoreDirectory = true;
if (fd.ShowDialog() == DialogResult.OK)
{
try
{
if ((inputDataFile = fd.OpenFile()) != null)
{
inputData_exists = true;
// ... read input data from CSV file
using (CsvFileReader reader = new CsvFileReader(inputDataFile))
{
CsvRow row = new CsvRow();
while (reader.ReadRow(row))
{
foreach (string s in row)
{
Console.Write(s);
Console.Write(" ");
}
Console.WriteLine();
}
// ... close the input data stream
inputDataFile.Close();
}
}
}
catch (Exception err)
{
//Inform the user if can't read the file
MessageBox.Show(err.Message);
}
}
}
以下を除いてすべて正常に動作します: csv ファイルには約 1200 行のコードがあります。このコードを実行すると、csv ファイルの内容がコンソール ウィンドウに書き込まれ始める前に、OpenFileDialog() ウィンドウが部分的にしか閉じません。そのため、データがコンソール ウィンドウに書き込まれていることがわかります。また、ダイアログ ウィンドウの小さな長方形の部分がフォームに表示されています。データがコンソールに書き込まれる前にダイアログを確実に閉じる方法はありますか? コンソールと通信するには、新しいスレッドを開く必要がありますか? どんなアドバイスや助けも大歓迎です。ありがとうございました。