3

私はc#(およびプログラミング全般)の学習を始めたばかりです。私は弦楽器に基づいて音楽を演奏する小さな大学のプロジェクトをやっています。Windowsフォームを使用しています。「再生」ボタンを押すと、文字列内の各文字を1つずつ通過し、適切な音を再生するforループでメソッドが開始されます。正常に動作しますが、音楽の再生を停止する「停止」ボタンを追加しようとしていますが、これまでのところ、音楽の再生中はフォームがフリーズし、他のボタンを押すことができません...異なるスレッドを持つことで私が望むことを達成できる唯一の方法は?? (私たちはまだスレッドを実際に調べていません!)

編集:答えてくれてありがとう!それはとても速かったです!:)

4

4 に答える 4

4

バックグラウンドで音楽を再生するには、 BackgroundWorkerクラスを確認してください。自分でスレッドを操作するよりもはるかに簡単です。

概要は次のとおりです。

http://www.albahari.com/threading/part3.aspx#%5FBackgroundWorker

于 2012-06-14T01:20:26.683 に答える
3

スレッドを変えることで自分が望むことを達成できる唯一の方法は、疑問に思っているだけですか?

通常、これはこれが発生するための最も一般的な方法です。BackgroundWorkerコンポーネントを確認することをお勧めします。これにより、バックグラウンドスレッドで作業(「ノートの再生」)を実行できますが、キャンセルのサポートも提供されます。

于 2012-06-14T01:19:38.300 に答える
1

あなたの質問に対する簡単な答えはYESです。

メインスレッドでループで音楽を再生しています。つまり、コードがループで実行されている間は、UIからイベントを受信できません。

これを修正するには、バックグラウンドスレッドで音楽ループを実行する必要があります。

于 2012-06-14T01:20:11.060 に答える
0

Application.DoEvents();まだスレッドを使用したくない場合は、各反復の後に使用してください。Theadsは最善の解決策ですが、あなたの質問を理解したように、最初にスレッドを学習するときに待っています:)呼び出しDoEvents()は、呼び出すときにウィンドウメッセージを処理できるため、頻繁に呼び出す場合は、ウィンドウがブロックされないようにする必要があります。ただし、これは最善の解決策ではなく、回避策と考えてください。最高の魂はスレッドを使用することです。

于 2012-06-14T01:20:19.870 に答える