Kezdőoldal » Számítástechnika » Programozás » Üdv, C# programozással kapcsol...

Üdv, C# programozással kapcsolatban lenne krédesem!?

Figyelt kérdés

Van egy mainform osztályom, majd egy buttn klikk eseményre szeretnék listbox-ba elemeket helyezni egy külön szálon, Mindezt egy külön classban elhelyezve valahogy így:

public partial class MainForm : Form

{

Logging logging= new Logging();

public MainForm()

{

InitializeComponent();

}



private void add()

{

while (true)

{

logging.add_data_to_listbox("sometext",listBox1);

}

}


private void help_button_Click(object sender, EventArgs e)

{

Thread t = new Thread(add);

}


}


public partial class Logging

{


public void add_data_to_listbox(string data, ListBox listbox)

{

MainForm mnfrm = new MainForm();


mnfrm.Invoke(new MethodInvoker(delegate ()

{

listbox.Items.Add(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff - ") + data);

listbox.TopIndex = listbox.Items.Count - 1;


}));

}


}


De valamiért ezt a hibát kapom:

Additional information: Invoke or BeginInvoke cannot be called on a control until the window handle has been created.


2018. márc. 23. 13:57
 1/7 anonim ***** válasza:

Minek hozol létre új Form-ot?

Mit akar ez a kód megvalósítani egyébként?

2018. márc. 23. 14:18
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:

Nem új formot hozok létre, hanem példányosítottam a MainForm osztályt a Logging osztályban,de úgy tűnik megtaláltam a hibát így már működik:

public partial class MainForm : Form

{

Logging logging= new Logging(this);

public MainForm()

{

InitializeComponent();

}



private void add()

{

while (true)

{

logging.add_data_to_listbox("sometext",listBox1);

}

}


private void help_button_Click(object sender, EventArgs e)

{

Thread t = new Thread(add);

}


}


public partial class Logging

{

private MainForm mainfrm;

public Logging(MainForm form)

{

mainfrm = form;

}



public void add_data_to_listbox(string data, ListBox listbox)

{



mainfrm.Invoke(new MethodInvoker(delegate ()

{

listbox.Items.Add(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff - ") + data);


}));

}


}

2018. márc. 23. 14:27
 3/7 anonim ***** válasza:

"Nem új formot hozok létre, hanem példányosítottam a MainForm osztályt a Logging osztályban"

Mi a különbség?

2018. márc. 23. 14:28
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
Azért, hogy meg tudjam hivatkozni a MainFormot, de ahogy a válaszomban látod, a Mainformban mikor példányosítom a Logging osztályt, átadom neki paraméterként a mainformot, így a Logging konstruktorában átadom a mainfrm változónak
2018. márc. 23. 14:42
 5/7 anonim ***** válasza:

Persze, értjük mi mit csinálsz, a #3-as kérdése az volt, hgoy mi a különbség, a példányosítás és az új létrehozás között, hisz a 2 kifejezés pont ugyanaz:) Te egy új formot hoztál létre.


Én pedig személy szerint azt nem értem, hogy mért vacakolsz ott a form átadással, hisz a listboxot is átadod az add_data metódusnak. Egyszerűen hívj listbox.Invoke-ot...

2018. márc. 24. 07:49
Hasznos számodra ez a válasz?
 6/7 A kérdező kommentje:
Tudnál nekem erre egy példát küldeni, ha megkérlek? Köszönöm
2018. márc. 24. 09:43
 7/7 anonim ***** válasza:

Mármint mire?


Én csak ennyit mondtam:

listbox.Invoke(new MethodInvoker(delegate ()

{

listbox.Items.Add(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.fff - ") + data);


}));



Nincs szükség a formra az invoke-hoz...

2018. márc. 24. 10:38
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!