Autor Beitrag
huuuuuh
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Di 20.07.10 12:57 
hallo, hab schon vieles ausprobiert, komme aber im moment echt nicht weiter...
ich hab nen kleines chatprogramm mit c# geschrieben. das problem hat aber garnix mit netzwerk zu tun...
sondern damit, dass ich mehrere threads verwende. die komponenten kann ich aber nur aus dem hauptthread direkt ansprechen, deshalb hab ich nen wenig gesucht und bin auf Invoke() gestossen. das is dabei rausgekommen:
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
private void update_userlist(string[] userlist) //userlist_box ist die Listbox
        {
            if (userlist_box.InvokeRequired)
            {
                this.userlist = userlist;
                userlist_box.Invoke(new MethodInvoker(update_userlist_invoke));
            }
            else
            {
                this.userlist = userlist;
                userlist_box.Text="";
                for (int i = 0; i < userlist.Length; i++)
                {
                    try
                    {
                        userlist_box.Items.Add(userlist[i]);
                    }
                    catch
                    {
                    }
                }
                
            }
        }

        private void update_userlist_invoke()
        {
            userlist_box.Text=""; //macht es nicht
            for (int i = 0; i < userlist.Length; i++)
            {
                try
                {
                    userlist_box.Items.Add(userlist[i]); //das macht es seltsamerweise
                }
                catch
                {
                }
                
            }
        }

problem: die markierte stelle wird irgendwie nicht ausgeführt. oder interessiert die Listbox nich. userlist enthält auf jeden fall immer die richtigen werte...
PS: hab auch schon ResetText() versucht, um die Listbox zu leeren. kein erfolg...
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 20.07.10 13:36 
Um die ListBox zu leeren, mußt du
ausblenden C#-Quelltext
1:
listbox.Items.Clear();					

aufrufen.

Das Setzen von ListBox.Text macht nicht das, was du denkst:
MSDN hat folgendes geschrieben:

Ruft den Text des derzeit in ListBox ausgewählten Elements ab oder sucht diesen.


P.S: Außerdem ist deine Invoke-Methode umständlich.
Es wäre besser, du definierst dir ein passendes Delegate und rufst die selbe Methode damit auf (anstatt eine andere Methode und die Parameter als Klassenmember zu setzen - bei mehreren Threads geht das nämlich in die Hose...):
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
delegate void UpdateUserListDelegate(string[] userlist);

private void update_userlist(string[] userlist) //userlist_box ist die Listbox
{
    if (userlist_box.InvokeRequired)
    {
        userlist_box.Invoke(new UpdateUserListDelegate(update_userlist), new Object[] { userlist });
    }

    ...
}
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Di 20.07.10 13:37 
Hi,

listbox.Text = ffgfg betrifft das selektierte Item. Listbox.Clear schon getestet? (sorry habe nur eine Hand frei, habe mein Kind aufm Arm und kann gerade nichr testen) Das TryCatch ist so übrigens Aa...

_________________
Gruß
Christoph
huuuuuh Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 665
Erhaltene Danke: 19

win xp, (win vista), win 7
VS 2008 Express Edition, VS 2010 Express Edition, VS 2010 Professionell
BeitragVerfasst: Di 20.07.10 13:47 
danke euch beiden. ListBox.Items.Clear() hats gebracht :autsch:
@th69: danke für den code-schnippsel. werd mir das mal anschaun...
edit: das mit dem try catch stimmt. is ziemlich unnötig. keine ahnung warum ich es reingebaut hab :autsch: