Üdv, C# programozással kapcsolatban lenne krédesem!?
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.
Minek hozol létre új Form-ot?
Mit akar ez a kód megvalósítani egyébként?
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);
}));
}
}
"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?
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...
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...
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!