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?
Ja „das“ ein Formular-Objekt ist, aber ich bin in einem kritischen Abschnitt, dass die Funktion von einem anderen Thread aufrufen. –
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. –
Nein, tut es nicht. Ich kann den Timer nicht aktivieren. –