那位高手在使用waveInOpen&waveOutOpen时用过线程作回调使用(用其他方法会产生死锁),即使用CALLBACK_THREAD了参数?   
  能不能告诉在下用怎样的格式建立该线程,c++的代码已经有了,但.net不知道怎么写?
哪位高手帮忙看看.net下怎么写的,回答好后再给300分,分不够再加。谢谢。调用系统API
waveInOpen(&m_hIn,WAVE_MAPPER,&wfx,m_dwAudioInId,s_dwInstance,CALLBACK_THREAD);启动线程
BOOL CWaveIn::StartThread()
{
if (m_bThreadStart)
{
TRACE("CWaveIn::StartThread: Wave in thread has run.\n");
return FALSE;
} m_hAudioIn=CreateThread(0,0,AudioInThreadProc,this,0,&m_dwAudioInId);
if(!m_hAudioIn)
{
TRACE("CWaveIn::StartThread: Strat wave in thread fail.\n");
return FALSE;
}
m_bThreadStart = TRUE;
return TRUE;
}//用线程处理消息
DWORD WINAPI CWaveIn::AudioInThreadProc(LPVOID lpParameter)
{
TRACE("AudioInThreadProc start.\n");
CWaveIn *pWaveIn;
pWaveIn = (CWaveIn *)lpParameter; char buffer[1024];
MSG msg;
while(GetMessage(&msg,0,0,0))
{
switch(msg.message )
{
case MM_WIM_OPEN:
TRACE("MM_WIM_OPEN \n");
break;
case MM_WIM_CLOSE:
TRACE("MM_WIM_CLOSE \n");
break;
case MM_WIM_DATA:
WAVEHDR* pWH=(WAVEHDR*)msg.lParam;
waveInUnprepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));

if(pWH->dwBytesRecorded!=SIZE_AUDIO_FRAME)
break; memcpy(buffer,pWH->lpData,pWH->dwBytesRecorded);
pWaveIn->GetData (buffer ,pWH->dwBytesRecorded ); waveInPrepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
waveInAddBuffer((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR)); break;
}
}
TRACE("AudioInThreadProc exit.\n");
return msg.wParam;
}