我正在使用WPF 4.5中的WinForms替换应用程序。
当前的WinForms应用程序从C ++组件流式传输视频。 C#WinForms控件具有以下代码:
public void StartVideoStream(int iCamera)
{
if (InvokeRequired)
{
delStartVideoStream del = new delStartVideoStream(StartVideoStream);
Invoke(del, new object[] { iCamera });
}
else
{
if (!VideoPlaying)
{
int iSuccess = ClientComm.StartVideoStream(iCamera, ucVideoPlayer.Handle,
(ClientComm.streaming_protocols)Properties.Settings.Default.VideoStreamProtocol,
Properties.Settings.Default.VideoStreamFrameRate);
if (iSuccess != 0)
{
Debug.WriteLine("[ucVideo] Could not play video.");
}
}
else
{
ClientComm.SelectVideoStream(iCamera);
}
VideoPlaying = true;
}
}
您可以看到它将其句柄传递给COM组件,后者直接将视频写入其中。
问题是在WPF控件中没有句柄。我怎么能这样做WPF?
谢谢。
答案 0 :(得分:0)
我看到这样做的唯一方法是使用HwndHost(https://msdn.microsoft.com/en-us/library/system.windows.interop.hwndhost%28v=vs.110%29.aspx)在WPF控件内托管WinForms控件。不幸的是,这让你回到WinForms领域。
HwndHost有点涉及到一个明智的答案,但这里有一个合理的教程:http://blogs.msdn.com/b/ivo_manolov/archive/2007/10/07/5354351.aspx
你应该能够从Vlc.DotNet库(https://github.com/ZeBobo5/Vlc.DotNet)获得一些有用的指针,它们做了类似的事情。基于此,如果将WPF应用程序窗口的句柄传递给COM组件,视频可能会覆盖整个窗口。另一方面,如果您从WPF组件内的WinForms组件与COM组件通信,则可以使用WinForms组件的句柄,并保持窗口的其余部分不受阻碍。