C# Compact framework 3.5 UDPClient TIMEOUT

Blue_Fox

Mitglied
Hi

Wie in Betreff schon geschrieben, suche ich ein in CF 3.5 funktionierende Funktion wie ich einen Timeout beim UDPClient oder evtl. auch ueber einen Socket beim Empfangen machen kann.

Folgendes Hab ich schon Probiert:

Socket:
SocketOptions(....ReceiveTimeout, 500); // Funktioniert nicht, da nicht vorhanden
ReceiveSocket.Timeout = 500; // geht auch nicht

UDPClient:
kein Plan was da ueberhautp geht

Ich wollte es schon ueber einen TimerThread machen, der mir dann nach ablauf einer gewissen zeit ein Event ausloest, wenn er davor nicht geschlossen wird.

Code:
 Thread Timeout = new Thread(TimeoutThread);

 private void TimeoutThread()
        {   
            Thread.Sleep(500);
            //Event!!
        }

private UDPClient(){
 // tut irgendwas
try{
Timeout.Start();
UDPClientReceive.Receive(Buffer);
Timeout.Abort();
}
catch(TimeOutException){
// Fehlermeldung
}
}

Aber ich haenge da!! wie kann ich da dieses Speziefische Event "bauen" und dann noch aufrufen, wenn der Thread wieder aufwacht****

mfg
Blue_Fox
 

Blue_Fox

Mitglied
So hab jetzt selber was gebastelt....

Weiss nicht ob das jetzt so schoen programmiert ist, aber es funktioniert!!

Weitergeholfen hat mir diese Seite (http://www.mycsharp.de/wbb2/thread.php?postid=43415#post43415). Darauf stuetzt sich auch mein Programm

Hier mal die Ausschnitte:

Meine Timeout Klasse
Code:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace Lightcontrol
{
    class TIMEOUT
    {
        public event EventHandler<EventArgs> TimeOutEvent;

        protected virtual void OnTimeOutEvent(EventArgs e){
            EventHandler<EventArgs> timeoutevent = TimeOutEvent;
            if (timeoutevent != null)
            {
                timeoutevent(this, e);
            }
        }

        public void TimeCount()
        {
            Thread.Sleep(500);
            OnTimeOutEvent(EventArgs.Empty);
        }
    }
}

Die Verarbeitung im Programm. Leider bekomm ich ein SocketException, da ich meinen Client ausserhalb der Methode schliesse

Code:
       TIMEOUT TimeoutObject = new TIMEOUT();

        private Thread Timeout;

......

        Timeout = new Thread(TimeoutThread);
        TimeoutObject.TimeOutEvent += TimeOut_TimeOutEvent;

......
try{
        Timeout.Start();                      //TODO : SocketOptions - ReceiveTimeout don't work -> Sleep should help
        receivefromServer = ReceiveUDP.Receive(ref sender);
        Timeout.Abort();

.......
}
catch(SocketException){
                return null;
            }

Und dann noch die beiden Funktionen (Threadstart und TimeOut)
Code:
 private void TimeoutThread()
        {
            TimeoutObject.TimeCount();
        }

        public void TimeOut_TimeOutEvent(Object objSender, EventArgs e)
        {
            SendUDP.Close();
            ReceiveUDP.Close();
            ErrorDialog Dialog = new ErrorDialog(screensize);
            DialogResult DiaResult = Dialog.ShowDialog();
            if(DiaResult == DialogResult.Cancel){
                Timeout.Abort();
               }
        }

Ich hoffe anderen hilft die nun auch weiter!!

Wenn jemand einen Verbesserungsvorschlag hat, bitte schreiben!!

Mfg
Blue_Fox
 
Zuletzt bearbeitet: