关于调用非托管代码速度变慢的有关问题

关于调用非托管代码速度变慢的问题
using System;
using System.Runtime.InteropServices;

namespace QQloginCont
{
/// <summary>
/// PlaySound 的摘要说明。
/// </summary>
public class PlaySound
{
public PlaySound()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
[DllImport("winmm.dll")]
private static extern long mciSendString(string strCommand, string strReturn, int iReturnLength, IntPtr hwndCallback);
private static void GetWavAndOpen(int SoundId)
{
string sFileName;
switch(SoundId)
{
case 1://系统消息
sFileName="sound\\System.wav";
break;
case 2://收到消息
sFileName="sound\\Msg.wav";
break;
case 3://功能切换
sFileName="sound\\Folder.wav";
break;
default:
sFileName="sound\\Call.wav";
break;
}
string sCommand = "open \"" + sFileName + "\" type mpegvideo alias MediaFile"; //   MediaFile是选择播放文件类型 
string ret = null;
mciSendString(sCommand, ret, 0, IntPtr.Zero);
}
public static void play(int SoundId)
{
StopPlay();
GetWavAndOpen(SoundId);
string sCommand = "play MediaFile";
string ret = null;
mciSendString(sCommand, ret, 0, IntPtr.Zero);
}
private static void StopPlay()
{
string sCommand = "close MediaFile";
string ret = null;
mciSendString(sCommand, ret, 0, IntPtr.Zero);
}
}
}

调用
private void button1_Click(object sender, System.EventArgs e)
{
//PlaySound.play(3);
this.pFriend.Visible=true;
this.pGroup.Visible=false;
}

private void button3_Click(object sender, System.EventArgs e)
{
//PlaySound.play(3);
// MessageBox.Show("群功能尚未开放!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
this.pGroup.Visible=true;
this.pFriend.Visible=false;
}

当点击button进行折叠时,如果playsound不屏蔽,然后panel显示隐藏很慢,要5s钟吧,如果屏蔽了,刷的一下就可以了。
------解决方案--------------------
耗时的操作如果是异步呢?