本人正学习使用多线程。想把showLeftVideo()函数作为子线程的执行内容,然而却报错:无法从void转换为System.Threading.TreadStart,请问应该如何改写?谢谢!
......
Thread readThread1;
readThread1 = new Thread(showLeftVideo()); //本句出错
readThread1.Priority = ThreadPriority.BelowNormal;
readThread1.Start();
private void showLeftVideo()
{
CHCNetSDK.NET_DVR_CLIENTINFO lpClientInfo = new CHCNetSDK.NET_DVR_CLIENTINFO(); lpClientInfo.lChannel = 1;
lpClientInfo.lLinkMode = 0x0000;
lpClientInfo.sMultiCastIP = "";
lpClientInfo.hPlayWnd = picVideoLeft.Handle;
IntPtr pUser = new IntPtr();
m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V30(m_lUserID, ref lpClientInfo, null, pUser, 1); if (m_lRealHandle == -1)
{
uint nError = CHCNetSDK.NET_DVR_GetLastError();
//DebugInfo("NET_DVR_RealPlay fail %d!");
return;
}
}
......
Thread readThread1;
readThread1 = new Thread(showLeftVideo()); //本句出错
readThread1.Priority = ThreadPriority.BelowNormal;
readThread1.Start();
private void showLeftVideo()
{
CHCNetSDK.NET_DVR_CLIENTINFO lpClientInfo = new CHCNetSDK.NET_DVR_CLIENTINFO(); lpClientInfo.lChannel = 1;
lpClientInfo.lLinkMode = 0x0000;
lpClientInfo.sMultiCastIP = "";
lpClientInfo.hPlayWnd = picVideoLeft.Handle;
IntPtr pUser = new IntPtr();
m_lRealHandle = CHCNetSDK.NET_DVR_RealPlay_V30(m_lUserID, ref lpClientInfo, null, pUser, 1); if (m_lRealHandle == -1)
{
uint nError = CHCNetSDK.NET_DVR_GetLastError();
//DebugInfo("NET_DVR_RealPlay fail %d!");
return;
}
}
变成
readThread1 = new Thread(showLeftVideo);
Thread readThread1;
readThread1 = new Thread(showLeftVideo);
readThread1.Priority = ThreadPriority.BelowNormal;
readThread1.Start();也有写成:
Thread readThread1;
readThread1 = new Thread(new ThreadStart(showLeftVideo));
readThread1.Priority = ThreadPriority.BelowNormal;
readThread1.Start();请问两者在功能上有何区别?谢谢!