2009-04-07 8 views
0

Um ein Memo auf meiner Form zugreifen, verwende ich den folgenden CodeWie für einen Timer sicheres Einfädeln verwenden (Timer Eigenschaften von anderem Thread ändern)

public string TextValue 
    { 
     set 
     { 
      if (this.Memo.InvokeRequired) 
      { 
       this.Invoke((MethodInvoker)delegate 
       { 
        this.Memo.Text += value + "\n"; 
       }); 
      } 
      else 
      { 
       this.Memo.Text += value + "\n"; 
      } 
     } 
    } 

Ich mag den gleichen Code verwenden, zu ermöglichen/Deaktivieren Sie meinen Timer, aber es gibt keine Eigenschaft InvokeRequired für einen Timer.

public int Timer 
    { 
     set 
     { 
      if (this.timer.InvokeRequired) //?? No such thing 
      { 
       this.Invoke((MethodInvoker)delegate 
       { 
        if (value == 1) 
         this.timer.Enabled = true; 
        else 
         this.timer.Enabled = false; 
       }); 
      } 
      else 
      { 
       if (value == 1) 
        this.timer.Enabled = true; 
       else 
        this.timer.Enabled = false; 
      } 
     } 
    } 

Wie kann der Timer von einem anderen Thread aus aktiviert werden?

Antwort

2

Ist "das" ein Formularobjekt?

Angenommen, Sie haben das Timer-Objekt mithilfe des Formular-Designers erstellt. Das Objekt wird vom selben Thread erstellt wie das Formular, sodass die InvokeRequired-Eigenschaft des Formulars dasselbe anzeigt.

+0

Ja „das“ ein Formular-Objekt ist, aber ich bin in einem kritischen Abschnitt, dass die Funktion von einem anderen Thread aufrufen. –

+0

Das ist in Ordnung. Alle InvokeRequired-Boolesche Werte sagen Ihnen, ob der CurrentThread == ThreadThatCreatedTheObject ist. Der Thread, der das Formular erstellt hat, ist derselbe Thread, der den Timer erstellt hat, damit dies funktioniert. –

+0

Nein, tut es nicht. Ich kann den Timer nicht aktivieren. –

1

den Timer aus dem Code entfernen wie unten:

public int Timer 
{ 
    set 
    { 
     if (this.InvokeRequired) 
     { 
      this.Invoke((MethodInvoker)delegate 
      { 
       if (value == 1) 
        this.timer.Enabled = true; 
       else 
        this.timer.Enabled = false; 
      }); 
     } 
     else 
     { 
      if (value == 1) 
       this.timer.Enabled = true; 
      else 
       this.timer.Enabled = false; 
     } 
    } 
}