Laden...

Forenbeiträge von Chronos Ingesamt 132 Beiträge

01.06.2012 - 02:23 Uhr

Hi habe mal eine Frage zum Thema MVVM undn Dialogen?

Vielleicht auch an die Erfahreneren unter euch?
Wie öffnet man am geschicktesten einen neuen Dialog?

Übers XAML mittels einer OpenWindowAction, von der View aus in dem die View einen Event des ViewModels aboniert oder direkt in dem ViewModel.

Wenn letzteres wie handelt man dort am besten die Geschichte mit dem DialogOwner?
Man hat ja über das ViewModel kein Zugriff auf die View um sie als Owner im VM setzten zu können...

Mein Problem was mich zu dieser Frage führte ist eigentlich, das ich wenn ich einen Dialog öffne auch gleich Daten im ViewModel des neuen Dialogs vergeben muss. Der DataContext ist dabei wie gehabt das VM womit sich die Möglichkeit erübrigt die benötigten Daten als DataContext mit zu geben...

Das ViewModel wir im Übrigen mittels eines Locators (Angelegt in der App.xaml als statische Resource zur Verfügung gestellt.

Wäre für jede Art von Hilfe dankbar!

26.05.2012 - 11:35 Uhr

Hallo, ich habe eine Frage zur Umsetzung des MVVM-Patern bei WPF Anwendungen.

Folgendes Problem:

Ich habe eine View (UserControl) mit dazugehörigem ViewModel. So das ViewModel / die View soll einen Event bereitstellen der einen Aktionabschluss signalisieren soll. Die View in dem das oben erwähnte UserControl bereitgestellt wird, soll auf diesen Event reagieren können.

Mir ist schon klar das ich vermutlich den Event im CodeBehind der View deklarieen muss, aber würde das nicht wider dem Pattern stehen?

Also, wie man Events usw. bereitstellt ist für mich kein Problem, jedoch angewandt auf das MVVM für mich nicht ganz klar.

Kann mir jemand da weiterhelfen?

17.05.2012 - 12:43 Uhr

Hallo,

ich wollte mich mal ein wenig mit dem MVVM auseinandersetzen.
Dazu wollte ich eine kleine Anwendungschreiben die zunächst ein paar Basics umsetzt.

Jedoch tauchen jetzt beim RelayCommand erste Verständnissprobleme bzw generelle Probleme bei der Implementierung auf.

Zunächst mein Command, dieser ist zunächst so implementiert:


public class RelayCommand : ICommand
    {
        #region Fields

        readonly Action<object> _execute;
        readonly Predicate<object> _canExecute;

        #endregion // Fields

        #region Constructors

        public RelayCommand(Action<object> execute)
            : this(execute, null)
        {
        }

        public RelayCommand(Action<object> execute, Predicate<object> canExecute)
        {
            if (execute == null) { throw new ArgumentNullException("execute"); }

            _execute = execute;
            _canExecute = canExecute;
        }
        #endregion // Constructors

        #region ICommand Members

        [DebuggerStepThrough]
        public bool CanExecute(object parameter)
        {
            return _canExecute == null ? true : _canExecute(parameter);
        }

        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }

        public void Execute(object parameter)
        {
            _execute(parameter);
        }

        #endregion // ICommand Members

    }

Dieser wird über ein Public Property vom ViewModel der View zur Verfügung gestellt.

Die Implementierung im ViewModel und in der View schaut folgendermaßen aus:

ViewModel:


public class DemoViewModel: ViewModelBase
{
    public DemoViewModel()
    {
    }

    private ICommand _demoCommand;
    public ICommand DemoCommand
    {
        get 
        { 
            if(DemoCommand == null)
            {
                _demoCommand = new RelayCommand(p => ExecuteCommand(p), p =>   CanExecuteCommand(p));
            }
            return _demoCommand;
        }
        set
        {
            OnPropertyChanging("DemoCommand");
            _demoCommand = value;
            OnPropertyChanged("DemoCommand");
        }
    }

    private void ExecuteCommand(object parameter)
    {
        // Irgendwas...
    }

    private Boolean CanExecuteCommand(object parameter)
    {
        // Prüflogik 
        return true;
    }
}

View:


<Grid>
    <Button Content="Demo-Command" Height="23" HorizontalAlignment="Left" Margin="12,0,0,219" Name="buttonDemoCommand" VerticalAlignment="Bottom" Width="75" Command="{Binding DemoCommand}" />
</Grid>

So, nun zu meinem Problem...

Mein Problem ist, das das Control, in diesem Fall der Butten nur dann wieder enabled wird nachdem er den Focus verloren hat.

Es sei an dieser Stelle gesagt, das die Methode CanExecuteCommand nicht immer true zurück gibt sondern auch false falls der Button Disabled werden soll.
Das funktioniert ja auch, nur das Enablen nach der Prüflogik funktioniert nicht da das CanExecute wohl nur beim LostFocus abgearbeitet wird so wie es für mich aussieht.

Interessanterweise bzw. zu meiner Verwirrung ändert sich das oben beschriebene Verhalten auch dann nicht wenn ich die Verschiedenen Modis der Bindung ausprobiere. Nur wenn ich im Anschluss irgendwo in das Window klicke aktualisiert sich der ButtonState.

EDIT

Zu erwähnen wäre glaube ich noch das innerhalb des ViewModels ein Timer Tickt der einen Countdown runterzählt. Am Ende des ElapsedEvents müsste dann eigentlich irgendwie das CanExecute ausgeführt werden?

21.04.2012 - 10:10 Uhr

Hallo,

ich habe ein Problem was ich denke das es am VS2010 liegt.

Es stellt sich folgender maßen da:

Ich habe eine Solution mit 3 Projekten.
2 Klassenbibliotheken und eine WPF Anwendung die als Startprojekt deklariert ist.

Klassenbibliothek 1 nennt sich "Common", Klassenbibliothek 2 "Specialized".
"Specialized" hat einen Verweis auf common.

So, in "Common" füge ich den Verweis "System.Web" hinzu. Anwendung wird gebaut, soweit noch alles ok.
Nutze ich jetzt zum Beispiel "System.Web.HttpUtil" im Code von "Common" und baue die Anwendung danach neu, so wird mir angezeigt das in der WPF-Anwendung weder die "Common" noch "Specialized" gefunden werden konnte obwohl die Verweise angelegt sind.

Weis dazu jemand was?
Finde ich gerade etwas sehr verwirrent um das mal so zu sagen.

21.10.2011 - 14:25 Uhr

Hey, danke euch beiden für eure Antworten.

Ich wollte jetzt erstmal Abt´s Beispiel testen.
ich hab das soweit auch implementiert jedoch scheint die Validierung nicht angesprochen zu werden. Gehe ich recht in der Annahme das das Validieren im SaveChanges vorgang angesteuert werden müsste oder ist das On the Fly bei änderung der Daten (INotifyPropertyChanged) ?

21.10.2011 - 12:43 Uhr

Hallo,

ich hab eine Frage bezüglich der Datenvalidierung in einer WPF Anwendung.
Ich nutze das Entity Framework als Model.

Meine Idee war das EM mittels DataAnnotaion mit Validationattributen aufzumotzen.

Schaut dann in etwa so aus:



// Eigene Modelclasse zum verwalten des EM.
public class EntityController
{
 public EntityController()
{
// Code zum verknüpfen der Entityklasse mit der Metadatenklasse. (Das Attribut funktioniert wohl in diesem Falle nicht).
AssociatedMetadataTypeTypeDescriptionProvider EntityMetadataProvider = new AssociatedMetadataTypeTypeDescriptionProvider(typeof(Entity), typeof(EntityMetadata));
            TypeDescriptor.AddProviderTransparent(EntityMetadataProvider, typeof(Entity));
// Bei einer Abfrage per Reflection taucht das Required Attribut auch an dem NAME Propertie auf.
}

///Hier ist dann auch irgendwo der Context des EM...
}

// Autogeneratedcode
public partial class Entity
{
 public string Name { get; set; }   
}

// Von mir erstellte partielle Klasse zum erweitern.
[MetadataType(typeof(EntityMetadata))]
public partial class Entity
{
}

// Die dazugehörige Metadatenklasse.
public class EntityMetadata
{
 [Required()]
 public string Name { get; set; }
}


Das Problem ist anscheinent, dass das Requiredattribut oder überhaupt die Validierungsattribute überhaupt nicht beachtet werden.

Bei der Datenbindung habe ich im XAML ValidatesOnDataErrors und ValidatesOnExceptions auf True gesetzt.

Könnt ihr mir vielleicht weiterhelfen ?

THX im voraus!

17.10.2011 - 15:00 Uhr

verwendetes Datenbanksystem: <MySQL>

Hallo ich schreibe derzeit an einer Anwendung, die Daten aus einer Datenbank beziehen soll. Dargestellt werden soll dies in einer WPF MVVM Anwendung.
Als Datenquelle nutze ich eine MySQL Datenbank auf die ich mit dem Entity Framework (.Net 3.5) zugreifen möchte.

Die Datenbindung würde ich soweit ja noch hinbekommen jedoch habe ich ein recht verschachteltes Datenbankmodel. Jede Entität besitzt mindestens 2 Navigationseigenschaften. Das Problem ist jetzt das wenn ich direkt an eine Entität meine Controlls binden will funktioniert die Datenbeschaffung nur innerhalb der ersten Ebene. Würde ich zum Binden einen Objektpfad wie "Atom.Kern" angeben so ist die dazu benötigte Navigationseigenschaft null und das Feld was z.B. Text anzeigen soll leer. Ich habe jetzt schon etwas gegoogelt. Das Stichwort zu diesem Thema scheint wohl Lazy Loading zu sein.
Ich kann zwar jede Navigationseigenschaft prüfen ob IsLoaded true ist oder per Linq alle weiteren Entitäten Includieren, jedoch ist das bei der Masse an Entitäten die ich includieren müsste in meinen Augen etwas wahnsinnig. Ich brauche aber sämliche Entitätsinformationen. Gibt es da nicht eine einfacherer Lösung ?

P.S. ist meine erste Anwendung mit WPF und dem EF.

Vielen Dank im Voraus!

30.07.2011 - 16:54 Uhr

Alles klar, großes Problem kleine Lösung. Als Property angelegt und schon gehts.

Danke!

30.07.2011 - 14:59 Uhr

Hallo ich wollte mir eine kleine Anwendung in der WPF umsetzen.
Dazu wollte ich den MVVM-Pattern nutzen.

Das ViewModel und das Model steht.

Im der View wollte ich zunächst eine ListView aufstellen die eine ObservableCollection als ItemSource nutzen soll.

In Kurzfassung schauts in etwa so aus.

ViewModel:


public class ViewModel
{
public ObservableCollection<Device> Devices = new ObservableCollection<Device>();
}

View:


<Window x:Class="TestApplication.Assistent"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:a="clr-namespace:TestAssembly"
    Title="Setup-Assistent" Height="394" Width="745" WindowStyle="SingleBorderWindow">
    <Window.DataContext>
        <a:ViewModel />
    </Window.DataContext>
    <Grid>
        <ListView Margin="13,15,167,13" ItemsSource="{Binding Path=Devices}" Name="listViewDevices">
            <ListView.View>
                <GridView>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Model}" Header="Model:"></GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Address}" Header="Adresse:"></GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
    </Grid>
</Window>

Die Definition der Klasse Device erspare ich mir an dieser Stelle. Die benötigten Propertys stehen zur Verfügung und sind gesetzt. INotifyPropertyChanged wird auch verwendet.

Weis einer von euch woran das liegen kann ?
Der DataContext der ListView ist das ViewModel.
Nur eben ist die ItemSource null.

Zielframework ist im übrigen das 3.5.

MfG
Chronos

03.12.2010 - 21:53 Uhr

Hallo,

ich habe mal eine Frage. Ich stehe irgendwie vor einem Problem weis aber nicht wie ichs vernünftig lösen kann.

Ich habe einen WCF Service. Dieser arbeitet mit einer Klasse zum Verwalten von Clients zusammen. Diese Klasse beinhaltet eine Liste (BindingList<Client>) mit den dort angemeldeten Clients. Soweit alles kein Problem. Clients melden sich an und ab wies sein soll. In meinem Hauptprogramm biete ich einen Dialog an der mit in einer ListBox alle angemeldeten Clients darstellen soll. Das passiert in gewisser weise auch. Jedoch kommt jetzt das Problem.

Zur Aufstellung der Objekte. Die Liste der Clients wir mittels einer BindingSource an die Listbox gebunden.

Das anzeigen bereits angemeldeter Clients zum Zeitpunkt des erscheinens des Dialogs werden alle bis dahin angemeldete Clients auch brav in der Liste angezeigt. Meldet sich ein Client ab so wird er jedoch nicht aus der ListBox entfernt. Melde ich nach dem Abmelden des einen Clients einen weiteren Client an verschwindet der verweiste ListBox Eintrag und wird durch den neuen ersetzt.

Bis jetzt konnte ich es soweit verifizieren das bei Abmeldung eines Clients dieser aus der Bindinglist und aus der darangebundenen BindingSource entfernt wird. Jedoch schlägt sich die Änderung in der BindingList bzw. der BindingSource nicht auf die ListBox durch.

Nach der Anmeldung:
BindingList<Client>.Count = 1
BindingSource.Count = 1;
ListBox.Items.Count = 1

Nach der Abmeldung:
BindingList<Client>.Count = 0;
BindingScource.Count = 0;
ListBox.Items.Count = 1;

Innerhalb der Clientverwaltenden Klasse habe ich natürlich drauf geachtet das beim Hinzufügen und Entfernen von Clients aus der Liste dieser Vorgang per Lock gesichert wurde damit sich die Threads nicht untereinander verhaspeln.

Ich hoffe ihr könnt mir vielleicht sagen was das Problem seien könnte?

Gruß
Chronos

28.08.2010 - 11:24 Uhr

Hallo,

ja im Endeffekt sagt die Überschrift dieses Beitrags ja schon alles.

Ich habe ein Setup Projekt erstellt das mein eigentliches Prog installiert. Bei laufzeit des Programms werden einige Dateien und Ordner erstellt. Bei der Deinstallation werden diese aber nicht mitdeinstalliert da ja der Installer diese Dateien auch nicht kennen kann da sie bei der Installation ja nicht angelegt wurden.

Weis vielleicht jemand wie man dieses Problem lösen kann ?

Gruß
Chronos

01.06.2010 - 14:52 Uhr

Die Meldung lautet:


System.ServiceModel.Security.SecurityNegotiationException: Der Server hat die Clientanmeldeinformationen zurückgewiesen
30.05.2010 - 11:45 Uhr

So, also bei mir klappt es irgendwie immernochnicht, den Link habe ich mir angeschaut, brachte aber auch keine Erfolge.

Um den Fehler genau auszuführen hier mal die Exception die ich bekomme: SecurityNegotiationException

29.05.2010 - 13:35 Uhr

Hi, hab ich heute mal versucht, funktioniert nur dann wenn ich als Adresse den localhost:Port eingebe. Sobald ich dort die IP des Rechners eintrage gehts nicht mehr.

28.05.2010 - 09:12 Uhr

Hallo,
ich habe mal eine Frage zum WCF. Irgendwie stehe ich da auf dem Schlauch. Ich habe mir einen WCF Service gebastelt. Diesen kann ich auch auf meinem lokalen System nutzen. Versuche ich jedoch von einem anderen System im Netzwerk auf den Service zuzugreifen schietert dies (Firewall ist auf beiden Systemen aus). Ich habe jetzt mal gelesen das es wohl Probleme bei Domainen geben kann. Jedoch sind alle meine Systeme in einer Arbeitsgruppe. Könnt ihr mir vielleicht sagen was man bei einem Service der im Netzwerk zur Verfügung stehen soll beachten muss? Nutze netTcpBinding.

Muss ich vielleicht eine Authentifizierung dafür nutzen ?

Leider muss ich euch die Exception die ich bekomme bis heute Abend schuldig bleiben da ich momentan auf der Arbeit bin und mir die Exception nicht gemerkt habe. Hoffe aber ihr könnt mich zunächst einmal mit Infos zur Vorgehensweise aus der Praxis versorgen.

Thx
Chronos

07.04.2010 - 00:14 Uhr

Hi vielen Dank für deine Nachricht.
Also hab jetzt ma was zusammengeschrieben. Das scheint bis hierhin wohl auch irgendwie zu funktionieren. Hier mal der Code:



Type outlookType = Type.GetTypeFromProgID("Outlook.Application");
            object outlookApplication = Activator.CreateInstance(outlookType);

            object outlookNamespace = outlookApplication.GetType().InvokeMember("GetNamespace", BindingFlags.GetProperty, null, outlookApplication, new object[1] { "MAPI" });
            outlookNamespace.GetType().InvokeMember("Logon", BindingFlags.InvokeMethod, null, outlookNamespace, new object[4] { "default", null, true, true });
            object contactFolder = outlookNamespace.GetType().InvokeMember("GetDefaultFolder", BindingFlags.GetProperty, null, outlookNamespace, new object[] { 10 });

            object contactItems = contactFolder.GetType().InvokeMember("Items", System.Reflection.BindingFlags.GetProperty, null, contactFolder, null);
            System.Collections.IEnumerable items = (System.Collections.IEnumerable)contactItems;
            foreach (object cItem in items)
            {
                object EntryID = (string)cItem.GetType().InvokeMember("EntryID", BindingFlags.GetProperty, null, cItem, null);
            }
            Marshal.ReleaseComObject(contactFolder);
            Marshal.ReleaseComObject(outlookNamespace);
            Marshal.ReleaseComObject(outlookApplication);


Was ich mich allerdings frage um weiterzumachen. Was muss ich zum Beispiel beim ersten Parameter in der Methode InvokeMember angeben? Was die angegebenen Parameter angeht so habe ich diese lose im Netzt gefunden. Würde aber schon gerne wissen wollen was für andere Möglichkeiten ich da noch habe. Steht das irgendwo gelistet ?
MSDN habe ich schon nachgeschaut aber irgendwie weis ich auch nicht so recht wonach ich suchen soll.
Habs schon ma mit dem Objectbrowser versucht an diese Infos zu kommen, aber irgendwie werde ich da auch nicht so ganz schlau draus.

Mir geht es hierbei vor allem darum die Nummer, den Namen und das Kontaktbild zu bekommen. Wie gesagt, mit dem Verseis habe ichs bisher hinbekommen jedoch mit eben besagten Problemen aus Post1.

Chronos

01.04.2010 - 08:11 Uhr

Guten Morgen,

Ich benötige für mein aktuelles kleines Projekt Hilfe. Ich versuche Daten aus einer Outlookinstanz zu extrahieren. Dies aber auch nur wenn Outlook installiert ist.

Das extrahieren habe ich auch mit Verweisen auf die DLLs von Outlook hinbekommen.
Jedoch bekomme ich bei Anwendungsstart schon eine Exception um die Ohren gehauen wenn lokal kein Outlook installiert ist.

Gibt es da vielleicht eine andere Möglichkeit das zu lösen ?

Ich habe schon selbst einmal nach einer Lösung gesucht ...
btw. die Suche hier im Forum funktioniert bei mir irgendwie nicht.
Bekomme nach Seite 1 immer die Meldung "Die Seite wurde gelöscht ODER der Zugriff auf diese Seite wurde verweigert." Keine Ahnung warum...

Jedenfalls bin ich im Netz auf Reflection gestoßen. Ist dies das Mittel der Wahl oder gibts da noch andere Möglichkeiten.

Wenn Reflection:
Ich habe mir im Netz schon Beispiele angeschaut. Jedoch weis ich nicht so recht wie ich an die bereitgestellten Möglichkeiten von Outlook durch Reflektion kommen kann.

Kann mir vielleicht jemand nen Tipp geben ?

Gruß
Chronos

17.02.2010 - 12:52 Uhr

Hi, vielleich hilft hier ja das ICommunicationObject Interface weiter.
Dort gibt es einen Faulted Event.

ICommunicationObject

Hatte in einem Projekt das selbe Problem mit dem 10 Minutenfenster. Habe es so gelöst das ich nach ca. 9 Minuten einen "Ping" (Methode) sende damit das Tor offen bleibt.

Gruß
Chronos

16.10.2009 - 22:14 Uhr

Hallo,

ich kann problemlos eine Socketverbindung herstellen.
Was mir aber irgenwie sorgen bereitet ist wie ich mitbekommen kann ob der Port über dem die Verbindung besteht geschlossen wurde während die Verbindung aufgebaut ist.

Ist der Port geschlossen, so gibt mir Socket.Connected weiterhin true zurück.
und eine Socketexception bekomme ich nur wenn während des Verbindungsaufbaus bemerkt wird das der Port geschlossen ist.

Gibt es da irgendwie eine Möglichkeit das schließen eines Ports noch währened die Verbindung "existiert" mitzubekommen ?

Hier der Code fürs Login:


public bool Connect()
        {
            try
            {
                if (_connection == null)
                {
                    _connection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    _connection.Connect(_ipEndPoint);
                }
                if (_connection.Connected)
                {
                    OnMonitorConnectEvent();
                }
                return _connection.Connected;
            }
            catch (SocketException se)
            {
                if (se.ErrorCode == 10061)
                {
                    OnMonitorConnectionErrorEvent();
                    Disconnect();
                }
                return false;
            }
        }

        private void checkConnectionTimer_Tick(object sender, EventArgs e)
        {
            if (_connection == null || !_connection.Connected)
            {
                OnMonitorDisconnectEvent();
            }
        }

Ich habe mir überlegt per Timer alle paar sekunden die Verbindung zu testen. Nur auf was muss ich da achten ?

Hoffe ihr könnt mir da weiterhelfen ?

Thx
Mfg
Chronos

20.04.2009 - 11:05 Uhr

Hi, ich arbeite mich gerade in das Thema WCF ein, habe aber ein paar Fragen zu Sachen dir mir nochnicht so recht klar sind. Aber vielleicht könnt ihr mir da ja da weiterhelfen.

Also, bisher war ich dazu in der Lage (HowTo von MS) einen WCF Dienst in einen Windows Service zu hosten, dieser Service läuft auch und ich kann mich mit einem Client an ihm anmelden. Der Datenaustausch funktioniert auch soweit.

Was ich jetzt aber brauche, ist eine Methode die auf dem Client vom Server ausgeführt wird ohne das ich vorher eine Nachricht vom client aus an den Server schicke. Ich glaube das ist das Duplex was man da nutzen kann richtig ?

Aber bisher hab ich das nur so angewandt gesehen das der Client ne Nachricht an den Server schickt und der Server darauf antwortet. Kennt jemand vielleicht ein gutes Tuto ? Bei MSDN hab ich schon geschaut da steht auch was dazu aber irgendwie blicke ich da nicht so wirklich durch.

Eine andere Frage wäre das Thema absicherung. Der service soll hat nur im heimischen Netzwerk zu nutzen sein und nicht aus dem Internet verfügbar sein.
Ich nutze das TCP Protokol zum Verbindungsaufbau. Was muss ich da genau einstellen oder reicht es wenn ich den Port in meinem Router einfach nicht nach außenhin verfügbarmache ?

Thx

19.04.2009 - 11:03 Uhr

HI Dank dir für deine Antwort.

Ist denn das Remoting von IIS abhängig ?

Weil das sollte nach möglichkeit nicht sein.

18.04.2009 - 21:58 Uhr

Hi,

ich hab mir überlegt mir eine Software selbst zu schreiben, die Mittteilung eines Servers abfängt und verarbeitet. Dabei brauch ich allerdings etwas hilfe was die anzuwendenen Technologien angeht. Erstmal ganz grob was ich mir vorgestellt habe. Ich habe einen Server, dieser sendet zu einem Event eine Nachricht an Clients die zum Eventzeitpunkt verbunden sind.

Soweit so gut, eigentlich kein relativ großes Problem ABER...
es handelt sich nicht um ein Programm was die Daten vom Server empfangen soll sondern um mehrere Anwendungen. Aus diesem Grund hab ich mir gedacht einen Windows Service einzurichten, der auf dem Port des Servers lauscht und die Daten empfängt die er aussendet. Weiters soll der Service die empfangen Daten an die verschiedenen Software Clients senden. Und genau hier ist mein Problem...
Wie stellt man sowas am vernünftigsten an? Wobei es nicht gesagt ist das jeder der im moment überlegten 2 SwClients auch gestartet wurde.

Ich habe mich die letzten zwei drei Tage (sicherlich nicht genug um genau ins Thema einzutauchen) mit WCF beschäftigt. Nen Server / Client konnte ich auf Komandozeilenebene Umsetzen, war aber irgendwie nicht in der Lage den WCF Dienst in einen Win Service zu implementieren. Allein konnte ich den WCF Service starten und mit nem client drauf zugreifen aber im Dienst ließ sich dieser nicht starten. Außerdem hab ich noch nicht herausgefunden wie ich, ohne vorher vom WCF Client aus eine Nachricht an den WCF Server zu senden, die Daten des Servers der die Nachrichten rausschickt bekommen kann. Dazu müsste der WCF Server ja der aktive Part sein, der das Signal bei Eingang weiterleitet.

Ja das waren jetzt so meine Überlegungen und Umsetzungsversuche.

Was meint ihr ? ist WCF da das richtige (aktiver Server) oder wäre es da schlaue auf eine andere Technik umzusteigen (Sockets). Vor allem wäre mir noch wichtig zu wissen, ob man auch als naja, totaler Laie würde ich mich jetzt nicht nennen, aber als doch interessierter fortgeschrittener Laie damit klarkommen könnte.

14.04.2009 - 08:19 Uhr

Hi dank dir für deine Antwort.

Werde deine Vorschläge auf jedenfall berücksichtigen.
Aber was ich sehr merkwürig finde ist die Tatsache das sich die Verbindung trotzdem noch hält, nachdem ich sie ja eigentlich mit close() geschlossen habe.

13.04.2009 - 23:55 Uhr

Hi

ich suche nach einer "eleganten" Lösung einen Port auf einem Server zu beobachten (ob geschlossen oder nicht). Wichtig ist, das mir eine Veränderung sofort "gemeldet" wird. Bisher hab ich mir ne Lösung zusammengebastelt die aber meines erachtens suboptimal ist.

Ich nutze einen BackgroundWorker um laufend eine Verbindung zu diesem Port aufzunehmen. Kommt eine Verbindung zustande ist der Port offen. Bekomme ich keine Verbindung ist der Port dicht. Das würde soweit ganz gut klappen, wenn ich jetzt nicht das Problem hätte das ich dann nach ca 2min so um die 50 Socket Verbindungen hergestellt hätte was äußerst unschön ist. Gäbe es da nicht vielleicht eine andere Möglichkeit? Mir ist aufgefallen, das die Verbindungen alle nach etwa zwei Minuten geschlossen werden nachdem sie geöffnet wurde. Obwohl ich socket.close() nutze. Die Geschichte das die Verbindungen irgendwie erst nach 2 Minuten beendet werden habe ich so erstmal mit Thread.Sleep(umgangen), damit sich die Verbindungen nicht so anhäufen.

Hier erstma der Code:



private Socket testSock;
        void monitorConnectionStatusChecker_DoWork(object sender, DoWorkEventArgs e)
        {
            bool testAgain = true;
            while (testAgain)
            {
                try
                {    
                    testSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    testSock.Connect(ip, monitorPort);
                    if (testSock.Connected == true)
                    {
                        pStatus = MonitorPortStatus.PortOpen;
                        //Thread.Sleep(120000);
                    }
                    //testSock.Disconnect(false);
                   testSock.Close();
                }
                catch (SocketException ex)
                {
                    if (ex.ErrorCode == 10061)
                    {
                        pStatus = MonitorPortStatus.PortClosed;
                        stopMonitor();
                    }
                }
            }
        }


Habt ihr vielleicht noch ne Idee für mich ?

Thx
Chronos

12.04.2009 - 23:44 Uhr

Hi, an der zu empfangenen Nachricht kann ich nix ändern. Was natürlich ne Idee wäre, wäre die Nachrichten in eine Liste zu speichern. Zumal der Monitor ja schon in einem eigenen Thread abeitet.

Und ne andere Möglichkeit gäb es da so nicht ?
Das mann vielleicht den Puffer des Sockets für neue Nachrichten sperrt bis die gerade angezeigte MsgBox geschlossen wurde ?

12.04.2009 - 23:28 Uhr

Hi,

ich versuche mir gerade eine Klasse zu schreiben, mit der ich eine tcp Verbindung zu einem Server einrichten kann. Dieser Server sendet in unregelmäßigen Abständen einen unregelmäßig langen Datensatz (String).

Mein Problem ist jetzt, das ich zwar die Daten empfange, aber bedingt dadurch, das ich den string per MsgBox ausgebe kommt es zu einem "Aufstauen" der Daten wenn ich die MsgBox nicht gleich schließe. D.h. ich bekomme in der ersten MsgBox noch den normalen String, und in der nächsten bkomme ich einen String der aus meherern der zuerst genannten Strings besteht. Diese sollten aber einzeln in einer MsgBox angezeigt werden.

Vielleicht könnt ihr mir den entscheidenen Tipp geben ?

Hier erstmal nen Codeauszug:



public class Monitor()
{
...

private Socket client;
        private IAsyncResult socketResult;
        private AsyncCallback socketAsyncCallBack;
        byte[] buffer;
        private string ip;
        private int monitorPort;

private void monitorConnect()
        {
            if (client == null)
            {
                client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ipAdd = IPAddress.Parse(ip);
                IPEndPoint ipEnd = new IPEndPoint(ipAdd, monitorPort);
                client.Connect(ipEnd);
                if (client.Connected)
                {
                    WaitForCallInformations();
                }
            }
        }

public void WaitForCallInformations()
        {
            buffer = new byte[1024];
            try
            {
                if (socketAsyncCallBack == null)
                {
                    socketAsyncCallBack = new AsyncCallback(OnDataReceivingFromServer);
                }
                
                socketResult = client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, socketAsyncCallBack, socketResult);
            }
            catch
            {
            }
        }

public void OnDataReceivingFromServer(IAsyncResult aSyncRes)
        {
            try
            {
                int iRx = client.EndReceive(aSyncRes);
                char[] chars = new char[iRx + 1];
                System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
                int charLen = d.GetChars(buffer, 0, iRx, chars, 0, true);
                System.String szData = new System.String(chars);
                System.Windows.Forms.MessageBox.Show(szData);
                WaitForCallInformations();                
            }
            catch
            {
            }
        }
}

Thx
Chronosone

25.03.2009 - 12:46 Uhr

Hi, danke dir für deine Antwort.

Ja das hab ich mir auchschon überlegt, doch soll die besagte Nummer nachhere in einem String unbekannter Länge eingebettet werden, was die Sache dahingehend schwerer macht da ich den String dann splitten müsste und diese Parts dann einzeln vorlesen müsste. 🤔

25.03.2009 - 12:35 Uhr

Hi mal eine Frage, ich versuche gerade einen Nummerstring z.B. "412344" sprachlich ausgeben zu lassen. Dies mache ich mit der Speech Class (Source siehe weiter unten). Lasse ich aber den String vorlesen dann bekomme ich die Ansage vierhundertzwölftausenddreihundervierundvierzig angesagt. Hätte es aber schon gerne ins Format vier eins zwei drei vier vier.

Habt ihr vielleicht ne Idee dazu ? hier noch der Code:


NotifySpeech speech = new NotifySpeech();
            speech.Message = "412344";
            speech.speakAsync();

Hier noch meine Class NotifySpeech


class NotifySpeech
    {
        private System.Speech.Synthesis.SpeechSynthesizer speech;
        private string messageToSpeech;

        public NotifySpeech()
        {
            speech = new System.Speech.Synthesis.SpeechSynthesizer();
            speech.SpeakStarted += new EventHandler<System.Speech.Synthesis.SpeakStartedEventArgs>(speech_SpeakStarted);
            speech.SpeakCompleted += new EventHandler<System.Speech.Synthesis.SpeakCompletedEventArgs>(speech_SpeakCompleted);
            speech.StateChanged += new EventHandler<System.Speech.Synthesis.StateChangedEventArgs>(speech_StateChanged);
        }

        public string Message
        {
            get
            {
                return messageToSpeech;
            }
            set
            {
                messageToSpeech = value;
            }
        }

        public void speakAsync()
        {

            speech.SpeakAsync(messageToSpeech);
        }

        void speech_StateChanged(object sender, System.Speech.Synthesis.StateChangedEventArgs e)
        {
        }

        void speech_SpeakCompleted(object sender, System.Speech.Synthesis.SpeakCompletedEventArgs e)
        {
        }

        void speech_SpeakStarted(object sender, System.Speech.Synthesis.SpeakStartedEventArgs e)
        {
        }

        public void stopSpeaking()
        {
            if (speech != null)
            {
                speech.Pause();
                speech.Dispose();
            }
        } 

Thx
Chronos

14.03.2009 - 12:13 Uhr

Vielleicht auch hier nochmal der Aufruf


public override void show()
        {
            object[] dButtons = new object[1];
            dButtons[0] = Monitor.Resources.OKButton;

            NotifySpeech speech = new NotifySpeech();
            speech.Message = notMessage;
            speech.speakAsync();

            MediaCenterEnvironment.Dialog(
                notMessage,
                notCaption,
                dButtons,
                notDuration,
                true,
                notImagePath,
                delegate(DialogResult dialogResult)
                {
                    NotificationResult(dialogResult);
                }
            );
            File.Delete(notImagePath);
        }

Wichtig wäre es mir wie gesagt die Zeit herauszufinden die nötig ist um notMessage zu sprechen damit ich bei beendigung den Dialog schließen kann (notDuration ist zu ersetzten mit der Sprachdauer)

13.03.2009 - 17:11 Uhr

Ach so ja, hier der Code:



class NotifySpeech
    {
        private System.Speech.Synthesis.SpeechSynthesizer speech;
        private string messageToSpeech;

        public NotifySpeech()
        {
            speech = new System.Speech.Synthesis.SpeechSynthesizer();
            speech.SpeakStarted += new EventHandler<System.Speech.Synthesis.SpeakStartedEventArgs>(speech_SpeakStarted);
            speech.SpeakCompleted += new EventHandler<System.Speech.Synthesis.SpeakCompletedEventArgs>(speech_SpeakCompleted);
            speech.StateChanged += new EventHandler<System.Speech.Synthesis.StateChangedEventArgs>(speech_StateChanged);
        }

        public string Message
        {
            get
            {
                return messageToSpeech;
            }
            set
            {
                messageToSpeech = value;
            }
        }

        public void speakAsync()
        {
            
            speech.SpeakAsync(messageToSpeech);
        }

        void speech_StateChanged(object sender, System.Speech.Synthesis.StateChangedEventArgs e)
        {
        }

        void speech_SpeakCompleted(object sender, System.Speech.Synthesis.SpeakCompletedEventArgs e)
        {
        }

        void speech_SpeakStarted(object sender, System.Speech.Synthesis.SpeakStartedEventArgs e)
        {
        }

        public void stopSpeaking()
        {
            if (speech != null)
            {
                speech.Pause();
                speech.Dispose();
            }
        }



13.03.2009 - 15:59 Uhr

Hi, ich würde gerne in meine Anwendung eine Sprachausgabe einbauen. Prinzipiell funktioniert es soweit. Was ich jetzt aber brauche wäre die duration der Ansage. Weis vielleicht jemand wie man da ran kommen kann ?

HIntergrund ist folgender...
Ich habe ein Dialogfenster in dem ein Text zu sehen ist. Vor dem öffnen des Fensters (Messagebox.Show()) fänkt der PC an zu quasseln. Jetzt soll aber vor dem sprechen ermittelt werden wielange gesprochen wird. Wenn die Ansage zuende ist soll das Fenster wieder geschlossen werden. Und genau da hängt bei mir die Syncro.

Könnt ihr mir vielleicht nen Tipp geben ?

Thx
Chronos

12.12.2008 - 00:51 Uhr

Hi

ich versuche gerade eine UPnP Verbindung herzustellen um dort Werte abzufragen. Soweit klappt es auch, doch wenn ich versuche eine Action zu invoken bekomme ich diese Exception:

Typkonflikt. (Exception from HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))

HIer noch eben der Code


object objOutVal = new object[4];
            string xmlText = null;

            UPnPDeviceFinder upnpFinder = new UPnPDeviceFinder();
            UPnPDevices upnpDevices = upnpFinder.FindByType("urn:schemas-upnp-org:device:WANConnectionDevice:1", 0);
            UPnPService ContentDirectory = new UPnPService();
            
            foreach (UPnPDevice upnpDevice in upnpDevices)
            {
                //MessageBox.Show(upnpDevice.FriendlyName);
                UPnPServices upnpServices = upnpDevice.Services;
                foreach (UPnPService upnpService in upnpServices)
                {
                    if (upnpService.Id == "urn:upnp-org:serviceId:WANIPConn1")
                    {
                        ContentDirectory = upnpService;
                    }

                }
            }
            ContentDirectory.InvokeAction("GetExternalIPAddress", null, ref objOutVal);
            xmlText = (string)((object[])(objOutVal))[0];

Ich sehe das Problem bei der InvokeAction() -> objOutVal, nur komme ich einfach nicht drauf wie man das beheben könnte. Könntet ihr mir vielleicht helfen ?

P.S. hoffe das ich in diesem Unterforum richtig bin, sonst bitte ich um Entschuldigung und um Verschiebung dieses Beitrags in ein geeignetes Unterforum.

Thx
Chronos

06.10.2008 - 14:32 Uhr

Prinzipiell veruche ich erstmal das Bild in das DataSet zu bekommen um es dann im Grid anzuzeigen

06.10.2008 - 14:24 Uhr

ok, habs jetzt ma mit nem zweiten Memorystream versucht, aber nochimmer das selbe Problem 8o

MemoryStream ms = new MemoryStream(Convert.FromBase64String((string)Xiterator.Current.Value));
                        Bitmap bitmap = new Bitmap(ms);
                        //bitmap.Save("c:/test.jpg", ImageFormat.Jpeg);
                        MemoryStream msPicture = new MemoryStream();
                        bitmap.Save(msPicture, ImageFormat.Jpeg);
                        byte[] picBuffer = msPicture.ToArray();
                        this.contactList_DataTable.Rows.Add(name, picBuffer, number, typ);
06.10.2008 - 11:13 Uhr

Hi,

ja ich glaube nicht, denn wenn ich das Bild auf die Platte speichere klappt es ja, und das ByteArray ist auch fit bevor ich es in das DataSet packe. omisch ist halt die Exception String -> Bitmap. Diese nachricht kommt auch erst wenn ich das Bild im Testlauf in dem DataGridView darstellen will. Bis dahin klappt alles.

Trotzdem Danke

P.s. Habe mal die Meldung unten dran gehangen.

06.10.2008 - 02:02 Uhr

Hi

Ich habe ein DGV das seine Daten per Bindingsource aus einem Dataset bezieht. In diesem DataSet ist eine Spalte, die Bilder enthält. Diese Bilder wurden aus einem XML File in Form eines Base64 Strings ausgelesen. Jetzt ist die Frage, wie ich die Bilder aus dem DataSet in das DGV bekomme. Das DGV ist bereits mit DataGridViewImageColumn versehen.

Mein bisheriger Code um das Bild in das DataSet zu laden ist:


MemoryStream ms = new MemoryStream(Convert.FromBase64String((string)Xiterator.Current.Value));
                        Bitmap bitmap = new Bitmap(ms);
                        //bitmap.Save("c:/test.jpg", ImageFormat.Jpeg); <- Nur zum Testen des Bildes.
                        bitmap.Save(ms, ImageFormat.Jpeg);
                        byte[] picBuffer = ms.ToArray();
                        this.contactList_DataTable.Rows.Add(name, picBuffer, number, typ);

Jedesmal wenn ich jetzt in der Anwendung das DGV abfrage bekomme ich eine invalidCastException (Ungültige Umwandlung von String in Image). Aber wieso ? das Bild liegt doch jetzt in dem Byte Array, und die Zelle im Ds ist auf DataType System.Byte[] gesetzt, dann sollte das DGV doch eigentlich automatisch das Array in ein Bild umwandeln, so hab ich es jedenfalls verstanden 🤔

Kann mich vielleicht jemand auf den richtigen Pfad zurückführen und mir erklären was ich hier falsch mache ?

Vielen Dank,
Gruß
Chronos

07.08.2008 - 10:34 Uhr

Hi, ich hab irgendwie nen seltsames Problem.
Habe ein DataGridView das per Bindingsource an einem DataSet gebunden ist. Mittels AddNew füge ich eine neue Row dem DataSet hinzu. Das Problem ist, das die neue Row nicht sofort sichtbar ist, ich muss erst einmal den Scrollbarbalken anklicken X(. Hab es ma versucht nen Update auf dem DGV auszuführen, doch bringt das nix.

Der Code für die neue Row sieht folgend aus:


calllistDataTableBindingSource.AddNew();
                        calllistDataTableBindingSource.MoveLast();
                        DataRow row = ((DataRowView)calllistDataTableBindingSource.Current).Row;
                        if (row != null)
                        {
                            row.BeginEdit();
                            row[0] = "Eingehend";
                            row[1] = timepoint;
                            row[2] = caller;
                            row[3] = msn;
                            row[4] = "0:00";
                            row.EndEdit();
                        }

Und dann hätte ich noch ne andere Frage. Mittels AddNew wird die neue Row ja eingefügt, würde die neue Row aber gerne ganz oben in der Liste haben. Gibts da ne Möglichkeit ohne die Column zu sortieren ?

THX
Gruß aus NRW
Chronos

08.07.2008 - 15:54 Uhr

Klasse, vielen vielen Dank.

Ich wurd damit fast verrückt, musste es schon nan paar mal umstricken, aber so ganz richtig hatte es bisher nicht funktioniert. Aber so funzt es 👍

Thx
Chronos

08.07.2008 - 12:25 Uhr

Hi,

Ich versuche mittels C# und Regex eine ganz bestimmte Zeile Quellcode aus einer html Seite heraus zu filtern, genau gesagt geht es um die folgende Stelle Code:

[php]
<th class="c4"></th>
<th class="c4"></th>
</tr>

<script type="text/javascript">TrFonName("0", "test", "");</script>

<script type="text/javascript">TrFonNr("home", "123", "1", "");</script>

<script type="text/javascript">document.write(TrFon1());</script>

</table>

<script type="text/javascript">jslZebrastreifen("tList");</script>
[/php]

genau genommen geht es mir um:

[php]
<script type="text/javascript">TrFonName("0", "test", "");</script>

<script type="text/javascript">TrFonNr("home", "123", "1", "");</script>

<script type="text/javascript">document.write(TrFon1());</script>
[/php]

Ich hab da mal was versucht, allerdings komme ich mit dem Regex Pattern nicht so recht klar.

HIer mein Pattern:


Regex regex = new Regex("<script type=\"text/javascript\">TrFonName\\(\"([\\d]{1,})\", \"([\\w\\s&;-]{1,})\", \"([\\d]{1,}|)\"\\);</script>\\s\\s(<script type=\"text/javascript\">TrFonNr\\(\"([\\w]{1,})\", \"([\\d]{1,})\", \"([\\d]{1,}|)\", \"([\\d]{1,}|)\"\\);</script>\\s\\s)*<script type=\"text/javascript\">document.write\\(TrFon([\\d]{1,})\\(\\)\\);</script>");
            MatchCollection mc = regex.Matches(basics.getHTML("fon", "fonbuch", true));

Das große Problem ist, das dort wo jetzt "Test" steht alles andere Stehen kann, Zahlen, Buchstaben, Sonderzeichen... Wie genau bekomme ich "Test" und alles andere was an dessen stelle stehen kann heraus ?

Habs mal mit folgendem Code provisorisch versucht:


Regex regexEntryData = new Regex("(TrFonName|TrFonNr)\\D\\D([\\d]{1,}|[\\w]{1,})\\D\\D\\D\\D([\\w\\S ]{1,}|[\\d]{1,})\\D\\D([\\d]{1,}|)");
                    MatchCollection mcEntryData = regexEntryData.Matches(mc[i].Value);

Regex regexEntryName = new Regex(", \"[\\w\\S ]{1,}\",");
                    MatchCollection mcEntryName = regexEntryName.Matches(mcEntryData[0].Value);
                    name = mcEntryName[0].Value.Replace(", \"", "").Replace("\",", "").ToString();

Kommt jetzt oben bei Test ein Sonderzeichen hinzu klappt es wieder nicht mehr.
Ich denke mal da mach ich wohl irenwas falsch oder ? Nur wie bekomm ichs besser hin ?

Habt ihr ne Idee ?

Thx
Gruß
Chronos

05.07.2008 - 07:03 Uhr

Guten Mrgen alle miteinander,

ja, wie dr Titelja oben schon vermuten lässt, habe ich ein kleines Problemchen was die Codierung eines strings angeht.

Habe einen string(post_Data) der müsste auch Umlaute und Sonderzeichen enthalten. Diese Umlaute sollen jetzt etwa so aussehn, nur komme ich irgendwie nicht drauf wie ich das codieren soll/kann. (ö = &ouml; Ö = &Ouml; / = %2F)

Ich poste am besten ma mein Request:


string post_Data = "var:content=öÖ/var:lang=de&login:command/password=" + getPassword();
            
            string post_Url = "http://" + getServerIP() + ":" + getPort() + "/cgi-bin/webcm";

            HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(post_Url);
            HttpWRequest.Method = "POST";
            HttpWRequest.Headers.Set("Pragma", "no-cache");
            HttpWRequest.ContentType = "application/x-www-form-urlencoded";
            HttpWRequest.UserAgent = "ControlCenter";
            HttpWRequest.KeepAlive = true;
            HttpWRequest.Timeout = 300000;
            byte[] PostData = System.Text.Encoding.Default.GetBytes(post_Data);
            HttpWRequest.ContentLength = PostData.Length;
            Stream tempStream = HttpWRequest.GetRequestStream();
            tempStream.Write(PostData, 0, PostData.Length);
            tempStream.Close();
            WebResponse resp = HttpWRequest.GetResponse();
            StreamReader sr = new StreamReader(resp.GetResponseStream(), Encoding.ASCII);
            string cvsContent = sr.ReadToEnd();
            resp.Close();
            return cvsContent;

Meine Vermutung ist jadas es an dieser Zeile hier liegt:


byte[] PostData = System.Text.Encoding.Default.GetBytes(post_Data);

Statt Default hab ich schon ASCII und UTF-8 versucht aber bringen tut das nicht all zuviel, habs getestet und "/" bleibt "/".
Wobei, es müsste ja auch eigentlich nach ISO-8859-1 gehen oder?

Wäre doll, wenn ihr mir etwas helfen könntet.

Thx
Gruß
Chronos

25.06.2008 - 00:38 Uhr

Hi, hab da gerade mal wieder ne ganz komische Sache am laufen, und hoffe das ihr mir etwas weiterhelfen könnt. Folgendes:

Ich habe eine HTML Seite, die muss ich parsen. Auf dieser Seite kommen Zahlen vor, von 1 bis open End.
Diese Zahlen können auch mal nen Ausfall haben ( 1,2,3,5,6...)

Ziel ist es, die Zahl die da fehlt ausfindig zu machen und anzuzeigen.

Soweit so gut, hab da heute ma dran gesessen und eine Lösung dafür ausgearbeitet (Regex...). Da ich noch Anfänger in Sachen c# bin, bin ich mir sicher dass das noch besser geht, aber fürs erste reicht mir das schonmal (wenns denn mit folgendem auch funktionieren würde...). Jedenfall finde ich damit die Zahl die da fehlt.

Jetzt ist aber das Problem, das die Zahlen auf der Webseite nicht aufeinanderfolgen, sondern quer Beet verteilt sind (1,5,3,2,6...). Jetzt hänge ich natürlich wieder, und habe keinen blassen dunst was ich nun machen soll/muss/kann.

Kann mir vielleicht jemand helfen ?

Stelle jetzt ersteinmal meinen bisherigen Code vor. Dieser funktioniert aber nur wenn die Zahlen sauber ablaufen (1,2,3)


StreamReader sr = new StreamReader(app.sendSiteRequestToBox("fon", "fonbuch").GetResponseStream(), Encoding.ASCII);
            string htmlData = sr.ReadToEnd().Replace("\n", "").Replace("\" ", "\""); ;

            Regex fEntry_patern = new Regex("<[a-z]{1,} [a-z]{1,}=\"[a-z/]{1,}\">[aA-zZ(\"0-9, );</>\\s=]{1,}document.write[(][aA-zZ0-9();]{1,}</[a-z]{1,}>");
            MatchCollection eCountMc = fEntry_patern.Matches(htmlData);

            bool missingEntry = false;
            for (int i = 0; i < eCountMc.Count; i++)
            {
                Regex numberPart_Patern = new Regex("TrFonNr\\W\"([a-z]{1,})\", \"([0-9]{1,})\", \"([0-9]{1,})\", \"([0-9]{1,}|)\"\\W");
                MatchCollection numberPartMC = numberPart_Patern.Matches(eCountMc[i].Value);

                Regex number_Patern = new Regex("([0-9]{1,})");
                MatchCollection numberMC = number_Patern.Matches(numberPartMC[0].Value);
                if (numberMC[1].Value != (i + 1).ToString())
                {
                    if ((i + 1) < 10)
                    {
                        shortcall_Textbox.Text = "0" + (i + 1);
                    }
                    else
                    {
                        shortcall_Textbox.Text = (i + 1).ToString();
                    }
                    missingEntry = true;
                    break;
                }
            }
            if (!missingEntry)
            {
                if ((eCountMc.Count + 1) < 10)
                {
                    shortcall_Textbox.Text = "0" + (eCountMc.Count + 1);
                }
                else
                {
                    shortcall_Textbox.Text = (eCountMc.Count + 1).ToString();
                }
            }

Vielen Dank
Chronos

21.06.2008 - 20:14 Uhr

Ja ich weis das das etwas ungünstig gelöst sein mag, mir fiel abber keine andere Lösung zu diesem Problem ein.

Denn das Problem ist:

Form1 enthält das DGV, während Form1 gestartet wird, wird zeitgleich auch der Thread gestartet. In diesem Thread läuft eine undendliche Whileschleife ab, die die Funktion hat einen Port zu überwachen, auf dem Informationen über das Netzwerk kommen. Bei Eingang eines Signals wird aus dem nebenher laufenden Thread ein Dialog aufgerufen, der eben die eingehenden Informationen anzeigt. Diese Informationen sollen dann aber auch in dem DGV gelistet werden. Und da liegt beim mir halt das Problem, das ich von dem Dialog (Form2) nicht das DGV im Form1 beeinflussen kann.

Würde ich den Thread nicht starten sondern die Funktion in das Form1 einbauen, so das alles im selben Thread startet, würde ständig die Gui blockiert werden, weil gehorcht wird ob da was über das Lan kommt.

21.06.2008 - 17:49 Uhr

Hi, ja im Prinzip sagt der Titel ja schon alles.

Habe eine Hauptform, das ein DGV beinhaltet, neben diesem Form läuft ein neuer Thread, der ebenfalls ein Form beinhaltet, dieses Form reagiert auf Anfragen aus dem Netz. Wenn eine solche Anfrage rein kommt, möchte ich jeweils eine neue Row in dem DGV des ersten Forms einfügen. Gibts da irgendwie ne Möglichkeit dazu ? Bzw kann mir jemand dabei helfen / nen Tipp dazu geben wie man das am besten bewerkstelligt ?

Wäre cool

Thx
Chronos

16.06.2008 - 00:16 Uhr

Ok, hab ma ne Pause eingebaut (for-Schleife von 1000 durchgängen) aber auch da das selbe verhalten, das erste ma nix, danach gehts aber.

Außerdem hab ich die Stelle gefunden, an der es nach dem dritten versuch nicht mehr geht. An der Stelle blockiert die gesamte Gui aus einem mir nicht ersichtlichen Grund.

Es ist die Stelle:

Stream tempStream = HttpWRequest.GetRequestStream();

Bekomme aber dort keine Exception oder sowas, sondern die Gui bleibt einfach hängen für eine gewisse Zeit. Danach kann man sie aber wieder benutzen, dies aber meist erst nach 5-10 min X(

15.06.2008 - 21:55 Uhr

Hi klingt logisch, allerdings hat das andere Program dieses Problem nicht, ich hab mal versucht den Quelltext zu nutzen (ist so nen Sample von MS zum Thema WebRequest), Musste es allerdings etwas umbauen, und eben mit dem umgebauten gibts halt dieses Problem. Allerdings hab ich mir den Quelltext 1000x angeschaut und bin der Meinung das da das drinnen ist was bei einem POST notwenig ist, bis halt auf die Sachen mit den Cookies, aber die Box speichert eh keine Cookies, das hab ich schon überprüft. Komisch ist auch, das die Methode ganz sauber durchläuft, jedes mal, nur funktioniert es erst beim zweiten Versuch das die Box rauswählt. Das ist es, was ich nicht ganz raffe.

15.06.2008 - 18:44 Uhr

Hi, ja das ist mir schon klar, nur hab ich mal geschaut, an der Verbindung bzw. dem Server liegt es ehr nicht. Als Server dient meine Fritzbox. Ich versuche mit dem Request die Box eine Nummer wählen zu lassen. Das komische ist halt. Hab hier noch ein Program, was prinzipiell die selbe Funktion erfüllt (Nummer wählen über die FBox). Ich habe mal die Daten verglichen, die beide Programme an die Box schicken, und muss feststellen, das beide Programme 1:1 die selben Daten per POST schicken. Komisch ist nur, das mein Program nicht so zuverlässug läuft wie das andere. Also muss es doch irgendwie an meinem Code liegen, denn die Daten sind die selben die den PC verlassen, und ab diesem Punkt hat mein Programm ja keinen Einfluss auf das Verhalten der Box, was dieses Phänomen erklären könnte. Das ist ja das Merkwürdige daran, ich habe mal versucht mit dem Timeout zu spielen, aber auch das andere Programm nutzt einen Timeoutwert von 30000.

14.06.2008 - 16:24 Uhr

Hi,

hab ma eine Frage, und über die Suche irgendwie nix finden können.

Ich suche eine Möglichkeit eine Row in einem DataGrid mit der rechten Maustaste auszuwählen. Kann mir vielleicht jemand nen Tipp geben ?

Vielen Dank

Gruß
Chronos

09.06.2008 - 20:55 Uhr

Hi, bin mal wieder auf was ganz komisches gestoßen, was ich mir irgendwie nicht recht erklären kann.

Hab mir nen kleines Request gebastelt, was mir Daten bereitstellt.
Führe ich dieses das erste mal aus, ist sense, keine Reaktion (keine Exceptions oder derartiges). Starte ich danach die selbe Funktion funktioniert es, merkwürdiger weise ab da zuverlässig. Schließe und öffne ich das Program wieder und teste ich es nochmal bekomme ich wieder das selbe Ergebnis.

Komisch ist auch, das es hin und wieder auch mal zu noch komischeren Fehlfunktionen kommt, die meine ich auch was mit dem Request zutun hat. Führe ich die Funktion zu schnell hintereinander aus, so blockiert die gesamte Gui für etwa 10-15 Min. Danach kann ich die ui wieder benutzen.

Ich glaube ich schreibe mal meinen Code jetzt hier unten hinein. Vielleicht findet ihr ja den Fehler. Vorweg, hab das Timeout mal höher, mal niedriger gestellt, aber zu meist mit dem Erfolg das das Reguest dann garnicht mehr funktioniert.


HttpWebRequest HttpWRequest = (HttpWebRequest)WebRequest.Create(URL_BOX);
                HttpWRequest.Method = "POST";
                HttpWRequest.UserAgent = "ControlCenter";
                HttpWRequest.KeepAlive = true;
                HttpWRequest.Timeout = 300000;
                HttpWRequest.ContentType = "application/x-www-form-urlencoded";
                byte[] PostData = System.Text.Encoding.ASCII.GetBytes(URL_POSTDATA.ToString());
                HttpWRequest.ContentLength = PostData.Length;
                Stream tempStream = HttpWRequest.GetRequestStream();
                tempStream.Write(PostData, 0, PostData.Length);
                tempStream.Close();

Könnt ihr mir vielleicht sagen, was ich da falsch mache ?

Wäre echt cool, in diesem Sinne, vielen Dank

Thx
Chronos

26.05.2008 - 00:52 Uhr

Ahh so, das wuste ich nicht, vielen dank, jetzt funzt es wieder.

THX👍

26.05.2008 - 00:24 Uhr

Hi habe ne Anwendung geschrieben, aber das Problem, das ich se anscheinent nicht richtig beenden kann.

Weder mit this.Close(), noch mit Applictaion.Exit() funktioniert es. Auch das selbe bei dem Close Button oben rechts [X]. Die Anwendung bleibt weiter im Taskmanager gelistet.

Das einzige was meine Anwendung zum beenden bekommt ist Environment.Exit(1);

Woran könnte das liegen? Habe während das Programm läuft einen Thread am start, der die ganze Zeit mitläuft, aber der müsste doch auch mit Application.Exit mitgeschlossen werden oder ?

Oder was könnte dieses Verhalten sonst noch herbei führen ? jemand ne Idee ?

Thx
Chronos