Autor Beitrag
asterix76
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 09.03.09 16:19 
Hallo, wie kann ich den Inhalt eines IDictionary in eine ListBox ausgeben?

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
IDictionary<IPEndPoint, Variable> agent = Manager.Discover(VersionCode.V2, new IPEndPoint(IPAddress.Broadcast, 161), new OctetString("public"), 100);
                foreach (KeyValuePair<IPEndPoint, Variable> pair in agent)
                {
                   listBox_items.Items.Add(pair.Key + " announces " + pair.Value.Data);
                }


Diese funktioniert nicht. Die Ausgabe auf die Konsole hingegen funzt:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
IDictionary<IPEndPoint, Variable> agent = Manager.Discover(VersionCode.V2, new IPEndPoint(IPAddress.Broadcast, 161), new OctetString("public"), 100);
            foreach (KeyValuePair<IPEndPoint, Variable> pair in agent)
            {
                Console.WriteLine(pair.Key + " announces " + pair.Value.Data);
            }

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }



Warum ist das so?
THX füe Eure Antworten

Moderiert von user profile iconKha: C#-Tags hinzugefügt
Moderiert von user profile iconKha: Topic aus C# - Die Sprache verschoben am Mo 09.03.2009 um 16:42
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 09.03.09 17:47 
user profile iconasterix76 hat folgendes geschrieben Zum zitierten Posting springen:
Diese funktioniert nicht.
Was sich wie bemerkbar macht...? Einen Syntaxfehler sehe ich jedenfalls nicht.

_________________
>λ=
asterix76 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 09.03.09 18:44 
Hallo, ich habe folgendes Programm:

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:
/*
 * Created by SharpDevelop.
 * User: lextm
 * Date: 2008/8/9
 * Time: 12:24
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;
using System.Collections.Generic;
using System.Net;
using Lextm.SharpSnmpLib;
namespace TestDiscovery
{
    class Program
    {
        public static void Main(string[] args)
        {
            IDictionary<IPEndPoint, Variable> agents = Manager.Discover(VersionCode.V2, new IPEndPoint(IPAddress.Broadcast, 161), new OctetString("public"), 100);
            foreach (KeyValuePair<IPEndPoint, Variable> pair in agents)
            {
                Console.WriteLine(pair.Key + " announces " + pair.Value.Data);
            }

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }

       
    }
}


und will die Ausgabe eigentlich nur in einer WindowsForm haben.
Leider bekomme ich das nicht hin.
Liegt es vielleicht an der "Lextm.SharpSnmpLib" oder kann man so ein Kommandozeilen Toll nicht einfach in eine Windows Form überführen? Vielleicht hat der Autor seinen Quellcode auch so gesichert, dass man nichts verändern darf
Beachte die ersten Zeilen im Code. Das habe ich bis jetzt auch nicht rausbekommen, was der Autor mir damit sagen will.
Hat jemand ne Idee?

THX für die Antworten

Moderiert von user profile iconKha: C#-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 09.03.09 19:09 
Erstelle lieber eine neue WindowsForms Anwendung und füge dann den Code an die entsprechenden Stellen ein. In deinem Fall vermutlich am besten in einen ButtonClick.

Bei einer WindowsForms Anwendung musst du ereignisorientiert vorgehen, d.h. du musst auf z.B. einen ButtonClick reagieren. Du kannst dafür nicht einfach die main-Methode benutzen.
asterix76 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 09.03.09 19:19 
Hallo ich habe jetzt folgendes:

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:
41:
42:
43:
44:
45:
46:
using System;
using System.Collections.Generic;
using System.Net;
using Lextm.SharpSnmpLib;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;

namespace Testprogi
{
    public partial class Form1 : Form
    {
  
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }
                

        private void button1_Click(object sender, EventArgs e)
        {
            discover();
           
        }
        public  void discover()
        {

            IDictionary<IPEndPoint, Variable> agents = Manager.Discover(VersionCode.V2, new IPEndPoint  (IPAddress.Broadcast, 161), new OctetString("public"), 100);
            foreach (KeyValuePair<IPEndPoint, Variable> pair in agents)
            {
              listBox_items.Items.Add(pair.Key + " announces " + pair.Value.Data);
            }

            //Console.Write("Press any key to continue . . . ");
            //Console.ReadKey(true);
           
        }

       
    }


Wenn ich das Programm starten bzw. debuggen will kommt in der Ausgabe folgende Meldung:
The thread 0xb64 has exited with code 0 (0x0).


Was kann das sein?
}

Moderiert von user profile iconKha: C#-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 09.03.09 19:29 
Hast du denn eine echte Windows Forms Anwendung? Denn wenn das Formular nicht angezeigt wird, dann nutzt es dir auch nix, und das passiert in der main-Methode.

Bitte setze deinen Quelltext hier im Forum in C#-Tags indem du entweder vor und nach dem Quelltext unter Bereiche auf das + neben C# klickst oder indem du den Quelltext markierst und einmal drauf klickst.
Du kannst es auch manuell so schreiben:
ausblenden Quelltext
1:
<span class="inlineSyntax">{PROTECTTAG4365db6a7f646de851617c84df4e6fc4}</span>					
asterix76 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 09.03.09 19:42 
Jo erst einmal sorry, mit dem Style für den Sourcecode.

Wie bekomme ich diesen Sourcecode zu einer WinForm Anwendung:
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:
/*
 * Created by SharpDevelop.
 * User: lextm
 * Date: 2008/8/9
 * Time: 12:24
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */

using System;
using System.Collections.Generic;
using System.Net;
using Lextm.SharpSnmpLib;
namespace TestDiscovery
{
    class Program
    {
        public static void Main(string[] args)
        {
            IDictionary<IPEndPoint, Variable> agents = Manager.Discover(VersionCode.V2, new IPEndPoint(IPAddress.Broadcast, 161), new OctetString("public"), 100);
            foreach (KeyValuePair<IPEndPoint, Variable> pair in agents)
            {
                Console.WriteLine(pair.Key + " announces " + pair.Value.Data);
                
            }

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }

       
    }
}

Ich habe bereits eine neue Windows Form erstellt:
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:
using System;
using System.Collections.Generic;
using System.Net;
using Lextm.SharpSnmpLib;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;

namespace SNMP_Discovery
{
    public partial class Form1 : Form
    {
  
        public Form1()
        {
            InitializeComponent();
        }

    private void button1_Click(object sender, EventArgs e)
        {
            discover();
           
        }
        public  void discover()
        {

            IDictionary<IPEndPoint, Variable> agents = Manager.Discover(VersionCode.V2, new IPEndPoint(IPAddress.Broadcast, 161), new OctetString("public"), 100);
            foreach (KeyValuePair<IPEndPoint, Variable> pair in agents)
            {
              listBox_items.Items.Add(pair.Key + " announces " + pair.Value.Data);
            }         
        }

       
    }

}

das Porg macht aber nichts und es kommt nach einiger Zeit die Meldung "Keine Rückmeldung"
Wenn ich eine MessageBox.Show Anweisung vor der IDictionary platziere, wird diese auch noch angezeigt.
Wenn ich die MessageBox aber danach vor die foreach-Schleife setze, kommt es nicht mehr.
Das heisst es muss ja schon bei der Erstellung des IDictionarys ein Fehler passieren.

Bitte helft mir. :-)
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 09.03.09 19:55 
user profile iconasterix76 hat folgendes geschrieben Zum zitierten Posting springen:
Das heisst es muss ja schon bei der Erstellung des IDictionarys ein Fehler passieren.
Jupp, wenn auch eher eine Endlosschleife/Dead Lock/... als eine Exception, denn bei einer solchen müsste der Debugger anspringen. Der Bug muss also in dieser Library stecken.

_________________
>λ=
asterix76 Threadstarter
Hält's aus hier
Beiträge: 15



BeitragVerfasst: Mo 09.03.09 20:08 
Ist es denn wirklich ein Bug in der Library, wenn es mit der Kommando-Zeile funktioniert?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 09.03.09 20:12 
Wenn es an dieser einen Zeile hakt, bleiben nicht viele Alternativen übrig ;) .

PS: Du könntest beim "Hängen" auch mal im Debugger auf "Break" klicken und schauen, in welcher Methode er landet. Ohne Source der Lib wird dir das aber natürlich nicht allzu viel bringen.

_________________
>λ=