私は壁にぶつかっていて、皆さんが次のことで私を助けてくれることを願ってここに来ました:
定期的に(700ミリ秒ごとに)音が鳴るwp7アプリを設計しています。これらのサウンドをUIスレッド以外のスレッドで再生したいと思います。したがって、dispatch timer
これらのサウンドが鳴っている間、UIスレッドが頻繁に使用されるため、を使用することはできません。
この問題を見て、私はコマンドでを作成しbackgroundworker
ました。Thread.Sleep(700)
これは機能しますが、予想どおり、音が鳴るまでに700ミリ秒以上かかる場合があります。だから時々私は遅れを聞く。
backgroundworker
だから私はあなたたちに目を向けます-どうすれば、または別のスレッドで700ミリ秒ごとに音が鳴るのに近づくことができますか?Timer
賢明な考えですか?
わかりやすく説明するためのコードを次に示します。
private void RunBackgroundWorker()
{
backgroundWorker = new BackgroundWorker ();
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.DoWork += new DoWorkEventHandler(StartSounds);
backgroundWorker.RunWorkerAsync();
}
public void StartSounds(object sender, EventArgs e)
{
for (currentsoundchoice = 0; currentsoundchoice <= max; currentsoundchoice ++)
{
if (backgroundWorker.CancellationPending == true)
{
backgroundWorker.CancelAsync();
currentsoundchoice = max + 1; //just to ensure it stops.
}
else
{
Time_Tick();
if (max == 12)
currentsoundchoice = -1; //repeats the loop when it reaches max.
}
}
}
void Time_Tick()
{
Thread.Sleep(700);
FrameworkDispatcher.Update();
switch (sounds)
case 0: //code
break;
// ETC, So forth.......
}
タイマーを使用することもこれを行うための良い方法だと聞きましたが、バックグラウンドワーカーでタイマーを実行することは可能ですか?もしそうなら、それはどのように構成されますか?さらに重要なことは、聞こえる遅延なしに、希望する700ミリ秒の発火時間に近づけることができるでしょうか。
ありがとうございました。