Avatar billede lifo Nybegynder
22. maj 2004 - 23:58 Der er 4 kommentarer og
1 løsning

opdatering fra tråd med delegate

jeg har problemer med at komunnikere fra en trád og til mainForm'en

troede at jeg kunne løse problemet med delegates
men jeg kan ikke få det til at fungere

får en Exception
Controls created on one thread cannot be parented to a control on a different thread

det som jeg vil gøre er at oprette og tilføje en TabPage til en TabControl
koden som jeg har lavet

i min mainForm
...
public delegate void joinChannelDelegate(VyPacket packet);
private joinChannelDelegate joinChannelDel;

i mainforms constructor

joinChannelDel = new joinChannelDelegate(userJoins);
decode = new Decode(this,new PMCallback(visPrivateMessage),joinChannelDel);
recive = new Listen(decode);


metoden i mainForm som delegaten peger på

public void userJoins(VyPacket packet)
{
  bool eksists=false;
  //checks if channel exists
  foreach(Channel ch in channels)
  {
    if(ch.Name==packet.Channel)
    {
      eksists=true;
      break;
    }
  }
  if(!eksists)
  {
    Channel ch = new Channel(packet.Channel);
    channels.Add(ch);               
    tabControl1.TabPages.Add(ch);  //<--- Exception kommer her
  }
 
}


i Decode klassen

private MainForm.joinChannelDelegate joinChannelCallback;


public Decode(MainForm.joinChannelDelegate joinChannelCallback)
{
    this.joinChannelCallback = joinChannelCallback;
}

... hvor jeg prøver at kalde metoden i main

joinChannelCallback(packet);
Avatar billede erikjacobsen Ekspert
23. maj 2004 - 00:05 #1
Den siger jo hvad der er galt. Du laver en control (en "dims" på en
form, her vistnok en TabPage) i een tråd, mens formen og alle controller
ligger i en anden tråd. Det kan man ikke.

Kan du ikke i stedet for give public void userJoins(...) de nødvendige
parametre med, så den selv kan oprette din control? Så skulle du være i
den rigtige tråd.
Avatar billede lifo Nybegynder
23. maj 2004 - 00:30 #2
ved ikke rigtigt om jeg forstår h vad du mener med

troede det var det jeg gjorde
jeg giver et VyPacket objekt med
packet.Channel er kun en string
Channel er en classe som arver fra TabPage
og jeg opretter control'en i mainFormen
Avatar billede burningice Nybegynder
30. maj 2004 - 12:45 #3
Den channel du laver

Channel ch = new Channel(packet.Channel);

bliver lavet på en anden tråd, end din tabcontrol befinder sig på. Du kan altså ikke tilføje din channel til din tabcontrol, da det vil ske på tværs af trådene.

Istedet bør du lave en metode i din mainform, som opretter en channel og tilføjer den til tabcontroll'en
Avatar billede lifo Nybegynder
31. maj 2004 - 03:26 #4
fandt selv ud af det
løste det med at benytte Invoke

men ellers  cyberfessor om du kigger i kode eksemplet så kan du se at jeg laver metoden i mainformen
Avatar billede burningice Nybegynder
31. maj 2004 - 13:28 #5
ja, men metoden bliver kørt af en anden tråd... det var det jeg mente :) ikke altid lige nemt at formulere sig på skrift
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester