2013-05-18 4 views
1

Я разрабатываю GUI Window7, C#/WPF, используя Blend/XAML, и хочу показать видео H.264, которое я получаю из потока RTP видеовызова. Я использую библиотеку с открытым исходным кодом на основе C для создания видеовызова. Я создал неуправляемую библиотеку DLL, которая использует эту библиотеку на основе C для совершения видеовызова. P-INvoke из графического интерфейса WPF в DLL отлично работает.WPF GUI голодные сетевые сообщения

Однако я замечаю, что графический интерфейс WPF голодает сетевой поток, который используется для совершения вызовов и отправки/получения сетевых сообщений. Есть ли способ обойти эту проблему? Помните, что я использую XAML (не код) для графического интерфейса wpf.

+0

Скорее всего, вам понравится какой-то код и другие особенности (какая библиотека, потоки в использовании и т. Д.). – user7116

+0

Win32 Темы, созданные CreateThread в библиотеке C, используемой в Dll. Не могу назвать библиотеку по причинам, связанным с собственностью. –

+0

Если ваш неуправляемый код обрабатывает всю сетевую связь, почему вы обвиняете интерфейс WPF? Это удары по сети для других вещей? – jugg1es

ответ

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); 

, а затем вы проходите TestDelegate в неуправляемый поток через PInvoke. Идея состоит в том, чтобы неуправляемый поток вызывал поток вашего пользовательского интерфейса и отправлял сообщения в цикл сообщений, не блокируя пользовательский интерфейс.

Смежные вопросы