1

我正在使用 Blend/XAML 开发基于 Window7、C#/WPF 的 GUI,并且我想显示从视频通话的 RTP 流中获得的 H.264 视频。我正在使用基于 C 的开源库进行视频通话。我创建了一个非托管代码 DLL,它使用这个基于 C 的库进行视频通话。从 WPF GUI 到 DLL 的 P-INvoke 工作正常。

但是,我注意到 WPF GUI 正在耗尽用于拨打电话和发送/接收网络消息的网络线程。有没有办法解决这个问题?请记住,我正在为 wpf GUI 使用 XAML(不是代码)。

4

1 回答 1

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。

于 2013-05-19T04:35:42.170 回答