2013-08-30 2 views
-3

J'utilise le System.Times.Timer pour surveiller un processus et cela appelle régulièrement une méthode. Mais je suis confronté à un problème que l'invocation est faite en utilisant le multithreading. Si je supprime la minuterie, cela fonctionnera comme STA. Avec le minuteur, lorsque j'appelle le ElapsedMethod pour invoquer une autre fonction, il change en MTA, ce qui provoque une exception pour moi à la fin.Minuterie et multitraitement en C#

+4

quelle est l'exception? – Ehsan

+5

Quelle est la question? – Gareth

Répondre

2

changez le System.Timers.Timer en System.Windows.Forms.Timer et toute l'action sera effectuée sur le thread UI. Si vous ne voulez pas faire cela, vous pouvez définir SynchronizingObject à this. parce que quand SynchronizingObject est nulle, la méthode qui gère l'événement est appelé Elapsed un thread du pool système fils

+0

C'est 'System.Windows.Forms.Timer' –

+0

@JimMischel merci mis à jour. – Ehsan

2

System.Timers.Timer a une propriété SynchronizingObject que vous pouvez définir d'avoir l'événement soit au fil marshalée de l'interface utilisateur. Réglez cela sur le formulaire. C'est-à-dire:

System.Timers.Timer Timer1 = new System.Timers.Timer(); 
Timer1.SynchronizingObject = this; 
// add other Timer initialization here