C#/.NET/mono などをいじり始めたばかりで、シンプルなソング プレーヤーを作ろうとしています。このために、私は使用winmm.dll
しています(簡単なクロスプラットフォームソリューションが見つかりませんでした)。問題はこれです: 曲の再生に合わせてトラックバーを更新する必要があります。ミリ秒単位で時間を返すPlayer.GetLength
との2 つの関数があります。Player.GetCurrentPosition
「普通」と呼べば大丈夫です。しかし、次のようにタイマーで呼び出す必要があります。
new System.Threading.Timer((state) =>
{
length = Player.GetLength();
pos = Player.GetCurrentPosition();
trackBar1.Value = (pos / length) * 100;
}, null, 0, 100);
これはGetLength
であり、GetCurrentPosition
類似しています。
public static int GetLength()
{
StringBuilder s = new StringBuilder(128);
mciSendString("status Song length", s, s.Capacity, IntPtr.Zero);
return int.Parse(s.ToString());
}
問題:これら 2 つの関数のいずれかが呼び出されると、プログラムは警告も例外もスローされずに停止します。注: .NET を使用しています
だから、どこが間違っていたのか説明してもらえないかと思っていました:)