一下是部分代码,我在主窗体的一个线程中调用获取进度并显示到进度条中:
[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
[DllImport("winmm.dll", EntryPoint = "mciGetDeviceID", CharSet = CharSet.Auto)]
private static extern int mciGetDeviceID(string lpstrName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(string lpszLongPath, string shortFile, int cchBuffer);
private static Cplayer player;
private int baseVolumn;
private int trebleVolum;
private int leftVolum;
private int rightVolum;
private int masterVolum;
private int iPos;
private int duration;
private int currentPosition;
bool Flags = false; //当前时间
public int CurrentPosition
{
get
{
int i = 255;
string stringBuilder = "";
mciSendString("status MediaFile position", stringBuilder, i, 0);
return (int)(Convert.ToDouble(stringBuilder.ToString()) / 1000f); ;
}
}
[DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
private static extern int mciSendString(string lpstrCommand, string lpstrReturnString, int uReturnLength, int hwndCallback);
[DllImport("winmm.dll", EntryPoint = "mciGetDeviceID", CharSet = CharSet.Auto)]
private static extern int mciGetDeviceID(string lpstrName);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(string lpszLongPath, string shortFile, int cchBuffer);
private static Cplayer player;
private int baseVolumn;
private int trebleVolum;
private int leftVolum;
private int rightVolum;
private int masterVolum;
private int iPos;
private int duration;
private int currentPosition;
bool Flags = false; //当前时间
public int CurrentPosition
{
get
{
int i = 255;
string stringBuilder = "";
mciSendString("status MediaFile position", stringBuilder, i, 0);
return (int)(Convert.ToDouble(stringBuilder.ToString()) / 1000f); ;
}
}
/// <summary>
/// 当前时间
/// </summary>
public int CurrentPosition
{
get
{
try
{
durLength = "";
durLength = durLength.PadLeft(128, Convert.ToChar(" "));
Win32.mciSendString("status media position", durLength, durLength.Length, 0);
durLength = durLength.Trim();
if (durLength == "") return 0;
mc.iPos = (int)(Convert.ToDouble(durLength) / 1000f);
return mc.iPos;
}
catch { return 0; }
}
}
/// <summary>
/// 定位播放
/// </summary>
/// <param name="Position"></param>
/// <returns></returns>
public void SetMusicPos(bool isplay, int Position)
{
if (isplay)
{
string MciCommand = string.Format("play media from {0}", Position * 1000);
int RefInt = Win32.mciSendString(MciCommand, null, 0, 0);
}
else
{
string MciCommand = string.Format("seek media to {0}", Position * 1000);
int RefInt = Win32.mciSendString(MciCommand, null, 0, 0);
}
} public class Win32
{
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern int GetShortPathName(
string lpszLongPath,
string shortFile,
Int32 cchBuffer
); [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
public static extern int mciSendString(
string lpstrCommand,
string lpstrReturnString,
int uReturnLength,
int hwndCallback
); }
再试试