我正在使用 Blend/XAML 开发基于 Window7、C#/WPF 的 GUI,并且我想显示从视频通话的 RTP 流中获得的 H.264 视频。我正在使用基于 C 的开源库进行视频通话。我创建了一个非托管代码 DLL,它使用这个基于 C 的库进行视频通话。从 WPF GUI 到 DLL 的 P-INvoke 工作正常。
但是,我注意到 WPF GUI 正在耗尽用于拨打电话和发送/接收网络消息的网络线程。有没有办法解决这个问题?请记住,我正在为 wpf GUI 使用 XAML(不是代码)。
您只需要创建新的委托,并将其传递给非托管线程。如:
public delegate int PassH264Stream(byte[] buffer, int len);
public PASSH264Stream TestDelegate = {};
TestDelegate += (buffer, len) => Application.Current.Dispatcher.BeginInvoke(new Action(()
=> ReceiveInUiThread(buffer, len)), DispatcherPriority.Render);
然后通过 PInvoke 将 TestDelegate 传递给非托管线程。这个想法是让非托管线程调用您的 UI 线程并将内容发布到消息循环,而不会阻塞 UI。