我正在使用Blend / XAML开发基于Window7,C#/ WPF的GUI,我想展示从视频通话的RTP流中获得的H.264视频。我正在使用基于C的开源库来进行视频通话。我创建了一个非托管代码DLL,它使用这个基于C的库来进行视频调用。从WPF GUI到DLL的P-INvoke工作正常。
但是我注意到WPF GUI正在使用于拨打电话和发送/接收网络消息的网络线程挨饿。有办法解决这个问题吗?请记住,我正在为wpf GUI使用XAML(而不是代码)。
答案 0 :(得分:0)
您只需要创建新的委托,并将其传递给非托管线程。 如:
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。