tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
1
ZUGRIFFE
712
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Blue_Fox Blue_Fox ist offline Mitglied Bronze
    Registriert seit
    Aug 2011
    Beiträge
    32
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
     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
     

  2. #2
    Blue_Fox Blue_Fox ist offline Mitglied Bronze
    Registriert seit
    Aug 2011
    Beiträge
    32
    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.p...3415#post43415). Darauf stuetzt sich auch mein Programm

    Hier mal die Ausschnitte:

    Meine Timeout Klasse
    Code :
    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
    
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
           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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
     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
    Geändert von Blue_Fox (05.09.11 um 08:58 Uhr) Grund: Falsche Taste gedrueckt
     

Ähnliche Themen

  1. .NET Compact Framework 3.5
    Von Mexxchen im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 16.11.08, 22:45
  2. Datenbanken und Compact Framework
    Von Freak_Desperado im Forum .NET Datenverwaltung
    Antworten: 1
    Letzter Beitrag: 30.08.08, 17:56
  3. Compact Framework & Threads
    Von realbora im Forum .NET Café
    Antworten: 1
    Letzter Beitrag: 21.11.07, 17:03
  4. Compact Framework Bluetooth
    Von Trebjun im Forum .NET Windows Forms
    Antworten: 0
    Letzter Beitrag: 15.06.07, 17:13
  5. Compact Framework und Kryptographie
    Von MD1978 im Forum .NET Archiv
    Antworten: 1
    Letzter Beitrag: 15.12.04, 10:05