2009-09-05 3 views
1

У меня есть фоновый поток, который запускает события, но как я могу обеспечить потокобезопасный вызов этих событий с помощью NET CF?Thread-safe invoke on NET CF

Я бы использовал ISyncronizeInvoke на платформе NET, но я не могу найти это на NET CF. Я уверен, что есть эквивалент, доступный ... или?

ответ

7

The Compact Framework делает имеет Control.Invoke/BeginInvoke, хотя я считаю, что это ограничивается EventHandler делегата (с любым другим делегатом метанием исключения во время выполнения).

Предполагая, что ваш фактического экземпляра ISynchronizeInvoke будет управляющим интерфейсом, я бы просто передать ссылку, как Control к тому, что в ней нуждается. Если вы действительно хотите использовать интерфейс, вы всегда можете создать свой собственный интерфейс ISynchronizeInvoke, а затем реализацию, которая просто обертывает Control.

+1

Правильно, у CF есть Control.Invoke/BeginInvoke/InvokeRequired. Но они введены в класс Control, без интерфейса. –

+0

Спасибо, отредактируйте, чтобы сделать это более напористым :) –

3

Да она доступна в .NET CF, вот выдержка из такого проекта:
SampleMethod() вызывается из другого потока.

delegate void SimpleInvokeDelegate(); 
private void SampleMethod() 
{ 
    if (InvokeRequired) 
    { 
     Invoke(new SimpleInvokeDelegate(SampleMethod)); 
    } 
    else 
    { 
     // Update UI elements here. 
    } 
} 
Смежные вопросы