2009-09-05 5 views
1

J'ai un thread d'arrière-plan en cours d'exécution qui déclenche des événements, mais comment puis-je assurer une invocation thread-safe de ces événements en utilisant NET CF?invoquer thread-safe sur NET CF

Je voudrais utiliser ISyncronizeInvoke sur la plate-forme NET, mais je ne trouve pas cela sur NET CF. Je suis sûr qu'il y a un équivalent disponible .... ou?

Répondre

7

Le Compact Framework ne ont Control.Invoke/BeginInvoke, même si je crois qu'il est limité au délégué EventHandler (avec tout autre délégué lancer une exception au moment de l'exécution).

En supposant que votre réelle instance de ISynchronizeInvoke va être un contrôle de l'interface utilisateur, je venais de passer la référence Control à tout ce qui en a besoin. Si vous vraiment souhaitez utiliser une interface, vous pouvez toujours créer votre propre interface ISynchronizeInvoke, puis une mise en œuvre qui vient d'enrouler Control.

+1

Mais les sont introduits dans la classe Control, pas d'interface. –

+0

Merci, va modifier pour rendre cela plus assertif :) –

3

Oui, il est disponible dans .NET CF, voici un extrait d'un tel projet:
SampleMethod() est appelé d'un autre fil. Correct, le CF a Control.Invoke/BeginInvoke/InvokeRequired.

delegate void SimpleInvokeDelegate(); 
private void SampleMethod() 
{ 
    if (InvokeRequired) 
    { 
     Invoke(new SimpleInvokeDelegate(SampleMethod)); 
    } 
    else 
    { 
     // Update UI elements here. 
    } 
} 
Questions connexes