2010-04-02 3 views
0

Je souhaite supprimer les éléments cochés de la checklistbox (contrôle winform) dans la méthode de fichier de classe que j'appelle de manière asynchrone à l'aide de deletegate. mais il me montre ce message d'erreur: -Opération croisée non valide: accès à partir d'un thread autre que le thread sur lequel elle a été créée

Opération croisée pas valide: Contrôle 'checkedListBox1' accédé à partir d'un thread autre que le thread sur lequel il a été créé.

J'ai essayé d'invoquer requis mais j'ai encore eu la même erreur. Exemple de code est ci-dessous:

private void button1_Click(object sender, EventArgs e) 
{ 
    // Create an instance of the test class. 
    Class1 ad = new Class1(); 
    // Create the delegate. 
    AsyncMethodCaller1 caller = new AsyncMethodCaller1(ad.TestMethod1); 
    //callback delegate 
    IAsyncResult result = caller.BeginInvoke(checkedListBox1, 
          new AsyncCallback(CallbackMethod)," "); 
    } 

Dans le code de fichier de classe pour TestMethod1 est: -

private delegate void dlgInvoke(CheckedListBox c, Int32 str); 

private void Invoke(CheckedListBox c, Int32 str) 
{ 
    if (c.InvokeRequired) 
    { 
    c.Invoke(new dlgInvoke(Invoke), c, str); 
    c.Items.RemoveAt(str); 
    } 
    else 
    { 
    c.Text = ""; 
    } 

} 
// The method to be executed asynchronously. 

public string TestMethod1(CheckedListBox chklist) 
{ 
for (int i = 0; i < 10; i++) 
    { 
    string chkValue = chklist.CheckedItems[i].ToString(); 
    //do some other database operation based on checked items. 
    Int32 index = chklist.FindString(chkValue); 
    Invoke(chklist, index); 
    } 
return ""; 
} 

Répondre

1

Êtes-vous sûr que vous ne recevez pas l'erreur de cette ligne de code?

string chkValue = chklist.CheckedItems[i].ToString(); 
+0

oui je suis sûr à ce sujet. – user307524

Questions connexes