private void buttonUSBStart_Click(object sender, EventArgs e) { string output_folder = textBox2.Text; string file_name = textBox5.Text; string A_file = output_folder + "\\" + file_name + "_A.csv"; string P_file = output_folder + "\\" + file_name + "_P.csv"; string M_file = output_folder + "\\" + file_name + "_M.csv"; string G_file = output_folder + "\\" + file_name + "_G.nmea"; string UBX_file = output_folder + "\\" + file_name + ".ubx"; // ファイルが既に存在していたら警告を出す if (File.Exists(A_file) || File.Exists(P_file) || File.Exists(M_file) || File.Exists(G_file) || File.Exists(UBX_file)) { DialogResult res = MessageBox.Show("Are you sure you want to overwrite the files?", "Overwrite save", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation); if (res == DialogResult.Cancel) { MessageBox.Show("Abort overwrite save", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } // COMポートが接続されていなかったら警告を出す if (disconnectTokenSource == null) { DialogResult res = MessageBox.Show("Port has NOT been opened yet. Continue?", "Port check", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation); if (res == DialogResult.Cancel) { MessageBox.Show("Aborted", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; StreamWriter csv_A_orig = csv_A, csv_A_usb = new StreamWriter(A_file, true); StreamWriter csv_M_orig = csv_M, csv_M_usb = new StreamWriter(M_file, true); StreamWriter csv_P_orig = csv_P, csv_P_usb = new StreamWriter(P_file, true);; StreamWriter nmea_G_orig = nmea_G, nmea_G_usb = new StreamWriter(G_file, true);; BinaryWriter ubx_G_orig = ubx_G, ubx_G_usb = new BinaryWriter(new FileStream(UBX_file, FileMode.Append, FileAccess.Write));; SylphidePages.WriteCSVHeaderA(csv_A_usb); SylphidePages.WriteCSVHeaderM(csv_M_usb); SylphidePages.WriteCSVHeaderP(csv_P_usb); // バックグラウンド処理 loggingTask = Task.Factory.StartNew(() => { lock (fileSemaphore) { csv_A = csv_A_usb; csv_M = csv_M_usb; csv_P = csv_P_usb; nmea_G = nmea_G_usb; ubx_G = ubx_G_usb; } while (true) { token.ThrowIfCancellationRequested(); } }, token).ContinueWith(t => { lock (fileSemaphore) { csv_A = csv_A_orig; csv_M = csv_M_orig; csv_P = csv_P_orig; nmea_G = nmea_G_orig; ubx_G = ubx_G_orig; } csv_A_usb.Close(); csv_M_usb.Close(); csv_P_usb.Close(); nmea_G_usb.Close(); ubx_G_usb.Close(); closeLogTokenSource.Dispose(); closeLogTokenSource = null; loggingTask = null; if (closing) { return; } Invoke((MethodInvoker)(() => { buttonUSBBrowse.Enabled = true; buttonUSBStart.Enabled = true; textBox5.Enabled = true; buttonUSBStop.Enabled = false; })); }); buttonUSBStart.Enabled = false; buttonUSBStop.Enabled = true; textBox5.Enabled = false; buttonUSBBrowse.Enabled = false; closeLogTokenSource = tokenSource; }
private void buttonSDConvert_Click(object sender, EventArgs e) { string input_file = textBox3.Text; string output_folder = textBox1.Text; string file_name = textBox4.Text; string A_file = output_folder + "\\" + file_name + "_A.csv"; string P_file = output_folder + "\\" + file_name + "_P.csv"; string M_file = output_folder + "\\" + file_name + "_M.csv"; string G_file = output_folder + "\\" + file_name + "_G.nmea"; string UBX_file = output_folder + "\\" + file_name + ".ubx"; // ファイルが既に存在していたら警告を出す。キャンセルボタンを押すとメソッドを抜ける if (File.Exists(A_file) || File.Exists(P_file) || File.Exists(M_file) || File.Exists(G_file) || File.Exists(UBX_file)) { DialogResult res = MessageBox.Show("Are you sure you want to overwrite the files?", "Overwrite save", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation); if (res == DialogResult.Cancel) { MessageBox.Show("Abort overwrite save", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } BinaryReader br = new BinaryReader(File.OpenRead(input_file)); StreamWriter csv_A_sd = new StreamWriter(A_file, false); StreamWriter csv_P_sd = new StreamWriter(P_file, false); StreamWriter csv_M_sd = new StreamWriter(M_file, false); StreamWriter nmea_G_sd = new StreamWriter(G_file, false); BinaryWriter ubx_G_sd = new BinaryWriter(File.OpenWrite(UBX_file)); SylphidePages.WriteCSVHeaderA(csv_A_sd); SylphidePages.WriteCSVHeaderM(csv_M_sd); SylphidePages.WriteCSVHeaderP(csv_P_sd); var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; convertingTask = Task.Factory.StartNew(() => { SylphidePages pages_sd = new SylphidePages(); while (true) { token.ThrowIfCancellationRequested(); // LOG.DATの場合はProtocolのheaderの頭出しは必要ない byte head = br.ReadByte(); if (head == A_Page.header) { pages_sd.a.Update(br); pages_sd.DumpA(csv_A_sd); } else if (head == P_Page.header) { pages_sd.p.Update(br); pages_sd.DumpP(csv_P_sd); } else if (head == M_Page.header) { pages_sd.m.Update(br); pages_sd.DumpM(csv_M_sd); } else if (head == G_Page.header) { pages_sd.g.Update(br); pages_sd.DumpG(nmea_G_sd, ubx_G_sd); } } }, token).ContinueWith(t => { csv_A_sd.Close(); csv_P_sd.Close(); csv_M_sd.Close(); nmea_G_sd.Close(); ubx_G_sd.Close(); cancelConvertTokenSource.Dispose(); cancelConvertTokenSource = null; loggingTask = null; if (closing) { return; } DialogResult result = MessageBox.Show("Complete to output CSV files"); Invoke((MethodInvoker)(() => { buttonSDConvert.Text = "Convert"; buttonSDConvert.Enabled = true; })); }); cancelConvertTokenSource = tokenSource; buttonSDConvert.Enabled = false; buttonSDConvert.Text = "Converting..."; }