Laden...

Forenbeiträge von blackdynamic Ingesamt 51 Beiträge

02.08.2010 - 20:44 Uhr

Liebe Community,

ich bin gerade dabei ein Tool zu basteln, was mir erstmal nur die Gespräche innerhalb eines IRC Channels in einer WPF Textbox darstellen soll.

Die IRC Verbindung stelle ich mit dem SmartIrc4Net Framework (http://smartirc4net.meebey.net/jaws/) her.
Das funktioniert auch soweit.

Wenn ich nun den Listener in meinem Projekt starte, welcher den IRC Verkehr abhört und ein Event schmeisst sobald eine neue Nachricht gesendet wurde, hängt sich meine WPF Anwendung auf.

Ich vermute das es daran liegt, dass der Listener einfach die ganze Zeit damit beschäftigt ist, den IRC Stream zu lesen und das Programm deshalb nicht mehr dazu kommt die GUI an zu zeigen.

Ich könnte mir vorstellen, dass die Lösung darin liegt, die Methode Irc.Listen() in einem eigenen Thread aus zu führen, allerdings habe ich hierbei das Problem, dass er mir die Events dann logischer Weise in dem falschen Thread schmeisst, sodass ich es im Thread der WPF Anwendung nicht fangen kann.

Könnt ihr mir dabei evtl. helfen?

Wenn irgendwas nicht klar ist sagt einfach bescheid dann versuche ich es anders zu beschreiben.

Ich würde mich über Hilfe von euch wirklich sehr freuen.

Hier ist mein Code:


public partial class MainWindow : Window
    {
        private IrcConnection irc = new IrcConnection();
        private string server = "irc.quakenet.org";
        private int port = 6667;
        private string channel = "#4on4";

        public MainWindow()
        {
            irc.OnReadLine += new ReadLineEventHandler(OnReadLine);
            InitializeComponent();
        }

        void OnReadLine(object sender, ReadLineEventArgs e)
        {
            if ((e.Line.ToString().StartsWith("PING")))
            {
                string server = e.Line.ToString().Split(' ')[1];
                irc.WriteLine("PONG " + server, Priority.Critical);
                Console.WriteLine("Responded to ping at {0}.",
                    DateTime.Now.ToShortTimeString());
            }
            textBox2.Text = textBox2.Text + "\n" + e.Line;
        }

        void OnConnecting(object sender, EventArgs e)
        {
            textBox2.Text = textBox2.Text + "\n Connected.";
        }

        void OnDisconnected(object sender, EventArgs e)
        {
            textBox2.Text = textBox2.Text + "\n Disconnected.";
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            irc.Disconnect();
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            irc.Connect(server, port);
            Console.WriteLine("Connected.");
            irc.WriteLine(Rfc2812.Nick("asdassssblackdyna"), Priority.Critical);
            irc.WriteLine(Rfc2812.User("asdassssblackdyna", 0, "asdassssblackdyna"),
                Priority.Critical);
            irc.WriteLine(Rfc2812.Join(channel));
            irc.Listen();
        }
}

Viele Grüße
blackdynamic