2009-10-11 11 views

Répondre

0

Vous pouvez créer une sous-classe dérivée qui remplace les propriétés et utilise Invoke pour définir les propriétés d'une manière «thread-safe».

class DerivedLabel : Label 
{ 

    public override string Text 
    { 
     get 
     { 
      return Invoke(new Func<string>(GetText)) as string; 
     } 
     set 
     { 
      Invoke(new Action<string>(SetText), value); 
     } 
    } 

    private void SetText(string text) 
    { 
     base.Text = text; 
    } 

    private string GetText() 
    { 
     return base.Text; 
    } 

} 

Invoke() dirige le délégué que vous passez sur le même thread qui a créé le contrôle, il est donc thread-safe implicitement. Cependant, cela pourrait être beaucoup de travail si vous avez beaucoup de contrôles dont vous avez besoin pour sous-classer. Il vaudrait probablement mieux que vous compreniez pourquoi vous avez des problèmes de threading. Si les deux contrôles sont créés sur le même thread (ce qui est normal pour une application Windows), vous ne devriez pas obtenir ces exceptions. Créez-vous le formulaire PropertyGrid sur un thread différent pour une raison quelconque?

Questions connexes