「読み取り値を取得」ボタンを押すと、マイクを聞いて基本周波数を処理する簡単なアプリケーションを開発しています。私の問題は、DB に記録するデータを作成すると、値が 0 になることです。ソリューションをデバッグすると、挿入後にプログラムがまだ周波数を処理していることがわかります。
私のアプリケーションの基礎として、Codeproject (FTGuitarTuner) で入手可能なコードを使用しています。
private void getReading_Click(object sender, EventArgs e)
{
StartTime = DateTime.Now;
EndTime = StartTime.AddSeconds(3);
TotalMillisegundos = EndTime.Subtract(StartTime).TotalMilliseconds;
tmr.Start();
tmr.Tick += new EventHandler(tmr_Tick);
StartListenning(device);
while (DateTime.Now <= this.EndTime)
{
isListenning = true;
tmr_Tick(sender, e);
}
StopListenning();
/*Insert na BD*/
insertReadingBD(sender, e);
getBySessaoToolStripButton2_Click(sender, e);
}
他の3つの機能は
private void StopListenning()
{
isListenning = false;
frequencyInfoSource.Stop();
frequencyInfoSource.FrequencyDetected -= new EventHandler<FrequencyDetectedEventArgs>(frequencyInfoSource_FrequencyDetected);
frequencyInfoSource = null;
}
private void StartListenning(SoundCaptureDevice device)
{
isListenning = true;
frequencyInfoSource = new SoundFrequencyInfoSource(device);
frequencyInfoSource.FrequencyDetected += new EventHandler<FrequencyDetectedEventArgs>(frequencyInfoSource_FrequencyDetected);
frequencyInfoSource.Listen();
}
void frequencyInfoSource_FrequencyDetected(object sender, FrequencyDetectedEventArgs e)
{
if (InvokeRequired)
{
BeginInvoke(new EventHandler<FrequencyDetectedEventArgs>(frequencyInfoSource_FrequencyDetected), sender, e);
iEscreve = false;
}
else
{
if (e.Frequency > 25.000 && e.Frequency < 4500.000)
{
frequencies.Add(e.Frequency);
updateFreqTxt(e.Frequency);
}
}
}
私の質問は、すべての処理が完了した後にのみ DB に挿入する方法でイベントを同期するにはどうすればよいですか?
ありがとう!