Je travaille sur la création d'un contrôle de thread thread pour mon application de formulaires Windows.Thread Safe Control - Crashing VS 2008
Je comprends que je peux mettre le texte sur un fil de contrôle en toute sécurité en utilisant le code suivant:
private delegate void SetTextD(Control control, string value);
private static void SetText(Control control, string value)
{
if(control.InvokeRequired)
{
control.Invoke(new SetTextD(SetText), new object[] {control, value});
}
else
{
control.Text = value;
}
}
Puis dans mon code de forme que je peux appeler:
SetText(lblStatus, "Updating...");
Mon but est de créer un contrôle personnalisé, qui hérite de Label. Ensuite, à l'intérieur de cette classe, sur la propriété Text je peux appeler:
lblStatus.Text = « Mise à jour ... »
Ensuite, il fera automatiquement le bon fil du code de sécurité.
Voici le code que j'ai dans ma classe:
public class ThreadSafeLabel : Label
{
private delegate string GetTextD();
private delegate void SetTextD(string value);
private string GetText()
{
if (InvokeRequired)
{
return (string)Invoke(new GetTextD(GetText));
}
return Text;
}
private void SetText(string value)
{
if(InvokeRequired)
{
Invoke(new SetTextD(SetText), new object[] {value});
}
else
{
Text = value;
}
}
public override string Text
{
get
{
return GetText();
}
set
{
SetText(value);
}
}
}
Maintenant, lorsque je tente d'ajouter ce contrôle à ma forme, il se bloque VS 2008. Je pensais que peut-être il fallait faire avec définir la propriété de texte initiale lorsque vous l'ajoutez au formulaire, mais pas sûr.
Des pensées sur ce que je pourrais faire de mal ou ce que je pourrais manquer?
Si quelque chose n'est pas clair, demandez.
Merci!
Quelle exception obtenez-vous? – Clyde
A 'StackOverflowException'. – SLaks
.NET Runtime version 2.0.50727.3053 - Erreur de moteur d'exécution fatale (7A2E0F92) (0) – CodeLikeBeaker