Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Pico1184
Thema: OpenFileDialog - dynamischer Filter
Am im Forum: GUI: WPF und XAML

Hallo,

ich baue mir aktuell für einen OpenFileDialog einen dynamischen Filter string über eine switch Anweisung.
Der Filter ist ja folgendermaßen aufgebaut: Text files (*.txt)|*.txt|All files (*.*)|*.*

Ich bekomme eine List<string> args mit z.B. *.xml und *.txt

Nun, die Lösung finde ich semi optimal da ich mit der switch Anweisung ja aktuell wie im Beispiel an 5 Einträge gebunden bin und weil es so auch sehr unschön aussieht.

Habe aktuell aber keine Idee wie ich das anders lösen kann.

Habt ihr weitere Anregungen?


 switch (args.Count)
            {
                case 1:
                    dialog.Filter = $@"({args[0]})|{args[0]}";
                    break;
                case 2:
                    dialog.Filter = $@"({args[0]};{args[1]})|{args[0]};{args[1]}";
                    break;
                case 3:
                    dialog.Filter = $@"({args[0]};{args[1]};{args[2]})|{args[0]};{args[1]};{args[2]}";
                    break;
                case 4:
                    dialog.Filter = $@"({args[0]};{args[1]};{args[2]};{args[3]})|{args[0]};{args[1]};{args[2]};{args[3]}";
                    break;
                case 5:
                    dialog.Filter = $@"({args[0]};{args[1]};{args[2]};{args[3]};{args[4]})|{args[0]};{args[1]};{args[2]};{args[3]};{args[4]}";
                    break;
                default:
                    dialog.Filter = string.Empty;
                    break;
            }

Grüße

Pico

Thema: Wie bekomme ich den MainWindowHandle wenn showInTaskbar = false gesetzt ist?
Am im Forum: GUI: WPF und XAML

Habe es jetzt anders gelöst. Ich starte einfach ein zweites Window und öffne dieses dann auf dem zweiten Monitor. Danke euch dennoch für die Hilfe!

Thema: Empfehlungen für Udemy C# Kurse?
Am im Forum: Smalltalk

Kann dir CodeWithMosh sehr empfehlen.

Thema: Wie bekomme ich den MainWindowHandle wenn showInTaskbar = false gesetzt ist?
Am im Forum: GUI: WPF und XAML

Sorry auch dieser Lösungsweg verweist auf Windows Forms und weiter oben habe ich geschrieben, das es leider auch nicht mit der Process Id funktioniert, da auch hier ebenfalls ein Null handle geliefert wird.

Thema: Wie bekomme ich den MainWindowHandle wenn showInTaskbar = false gesetzt ist?
Am im Forum: GUI: WPF und XAML

Danke dir, allerdings möchte ich keine Referenz zu Windows Forms verwenden.

Thema: Wie bekomme ich den MainWindowHandle wenn showInTaskbar = false gesetzt ist?
Am im Forum: GUI: WPF und XAML

so siehts aus, ich möchte die selbe Anwendung nochmal starten und auf den zweiten Monitor schieben, so dass auf beiden Monitoren die gleiche Anwendung (allerdings in unterschiedlichen Instanzen) läuft.

Thema: Wie bekomme ich den MainWindowHandle wenn showInTaskbar = false gesetzt ist?
Am im Forum: GUI: WPF und XAML

Die Anwendung ist von uns. Das mit dem Kiosk Modus könnte ich mal checken, allerdings weiß ich nicht ob dies mein aktuelles Problem beheben würde (starten eines neuen Prozesses auf dem zweiten Monitor).

Ich habe verschiedenes probiert. Hier mal ein Auszug:


                var path = Assembly.GetExecutingAssembly().Location;

                var secondHmiProcess = new Process
                {
                    EnableRaisingEvents = true,
                    StartInfo =
                    {
                       FileName = path, 
                       Arguments = "exec=true", 
                       UseShellExecute = false
                    }
                };
                secondHmiProcess.Start();
                secondHmiProcess.WaitForInputIdle(-1);

             
                SetWindowPos(secondHmiProcess.MainWindowHandle, HWND_TOPMOST, (int)secondMonitor.Left, (int)secondMonitor.Top, (int)secondMonitor.Width, (int)secondMonitor.Height, 0);

oder


                var path = Assembly.GetExecutingAssembly().Location;

                var secondHmiProcess = new Process
                {
                    EnableRaisingEvents = true,
                    StartInfo =
                    {
                       FileName = path, 
                       Arguments = "exec=true", 
                       UseShellExecute = false
                    }
                };
                secondHmiProcess.Start();
              
                for (var i = 0; i < 50; i++)
                {
                  Thread.Sleep(100);
                  secondHmiProcess.Refresh();

                  if(secondHmiProcess.MainWindowHandle != IntPtr.Zero)
                      break;
                }

             
                SetWindowPos(secondHmiProcess.MainWindowHandle, HWND_TOPMOST, (int)secondMonitor.Left, (int)secondMonitor.Top, (int)secondMonitor.Width, (int)secondMonitor.Height, 0);


Habe auch probiert an das Handle über die ProzessId bzw. den Namen zu kommen, allerdings ist es immer Null.

Diese Anwendung soll sich auf dem zweiten Monitor nochmal selbst (als neuer Prozess) starten und hat folgende Parameter:

ResizeMode = NoRezise
ShowInTaskbar = False
WindowState = Maximized
WindowStartupLocation = CenterScreen
WindowStyle = None

Grüße

Thema: Wie bekomme ich den MainWindowHandle wenn showInTaskbar = false gesetzt ist?
Am im Forum: GUI: WPF und XAML

Hallo,

ich muss kurz etwas ausholen damit man verstehen kann um was es geht:

.net framework 4.6.1

Ich bin aktuell an einer Industrie Anlage / Maschine und habe dort einen Windows 10 Rechner mit zwei Monitoren über DVI, auf welchem eine spezielle WPF Anwendung läuft.

Die WPF Anwendung ersetzt die Standard Windows Shell, da es den Bedienern der Maschine unter keinen Umständen ermöglicht werden soll auf die Betriebssystem Ebene zu gelangen.

Soweit so gut, das passt auch alles. Nun ist es allerdings so, dass ich aus dieser Shell eine weitere WPF Anwendung starten muss (diese ist maximiert, Vollbild und ShowInTaskbar = false). Auch dies funktioniert einwandfrei über die bekannte “Process” Klasse).

Allerdings muss ich diese Anwendung automatisch auf dem zweiten Monitor öffnen.
Dazu wollte ich die “setwindowspos” Funktion aus der WinApi nutzen.

Diese erwartet allerdings ein handle auf das betroffene Fenster. Nun genau dies ist mein Problem. Ich bekomme über “Process.MainWindowHandle” immer ein Null Handle. Ich gehe davon aus, dass dies damit zu tun hat, dass die Anwendung außerhalb der taskbar (showintaskbar = false) läuft.

Habe auch schon “FindWindow” etc aus der WinApi probiert aber leider keine Chance.
Hat irgendjemand eine Idee wie ich an dieses Window Handle ran komme damit ich das Fenster auf den zweiten Monitor verschieben kann?

Viele Grüße

Pico

Thema: Webentwickler Asp.net MVC
Am im Forum: Jobbörse

UNSER VERSPRECHEN:
Dich erwartet ein spannendes Arbeitsumfeld in einem innovativen und modernen Unternehmen
Bei uns hast du die Möglichkeit, dich stetig weiterzubilden – auf allen Karrierestufen
Wir bieten dir verantwortungsvolle und abwechslungsreiche Aufgaben
Du hast doch mal Schwierigkeiten bei einer Aufgabe oder benötigst wertvollen Rat? Hilfsbereite und engagierte Kollegen stehen dir immer zur Seite
Du kannst dich bei uns auf eine flexible Arbeitsgestaltung und die unkomplizierte Du-Kultur freuen
Aufgrund unserer durchlässigen Hierarchien mit kurzen Kommunikations- und Entscheidungswegen begegnen wir uns als Kollegen immer auf Augenhöhe.

DEINE ZUKÜNFTIGEN AUFGABEN:
Du entwickelst eigenverantwortlich neue hochwertige Web-Frontend- und Backendsysteme mit Angular, TypeScript, Bootstrap, ASP.NET MVC oder Core, Docker und Node.js
Dabei implementierst du die Entwürfe unserer UX/UI-Designer mit den entsprechenden Technologien
Als aktiver Mitgestalter unserer Anwendung bringst du Projekt- / Entwicklungs- und Technologievorschläge eigeninitiativ und eigenverantwortlich ein
Als wichtiger Teil unserer SCRUM-Teams arbeitest du an interdisziplinären Aufgaben.

WAS WIR VON DIR ERWARTEN:
Du hast dein Studium im Bereich Informatik oder eines ähnlichen Studiengangs erfolgreich abgeschlossen
Darüber hinaus bringst du fundierte Kenntnisse in der Webentwicklung mit und hast Interesse, dich stetig weiterzuentwickeln
Erfahrung im Umgang mit modernen Technologien, Datenbanken und Infrastrukturen können wir bei dir voraussetzen
Du passt perfekt zu uns, wenn du dich für innovative und neue Technologien im Umfeld der Industrie 4.0 und Augmented Reality genauso interessierst, wie wir.

ANSPRECHPARTNER:
Lara Meister
Hi, ich bin Lara und dein Ansprechpartner, wenn du unser großartiges Team noch ein wenig großartiger machen möchtest. Lass uns deine Bewerbungsunterlagen ganz einfach online zukommen und wende dich bei Fragen gerne telefonisch oder per E-Mail an mich. Ich freue mich, wenn ich dir helfen kann.

Telefon: +49 (0) 7251 32 641 00
deinekarriere@essert.com

ESSERT GmbH
Großer Sand 18
D-76698 Ubstadt-Weiher

Thema: ASP.NET MVC - HttpWebRequest Authentication Header setzen
Am im Forum: Web-Technologien

Hallo,

ich möchte einen REST Service in meiner ASP.NET MVC Anwendung verwenden und muss mich dazu entsprechend Authentifizieren. Dazu habe ich einen apiKey bekommen. Der ApiKey muss nun in den Request Header eingebunden werden.

Beispiel der Dokumentation:


curl -H "x-netscan-auth: xxxxxx" -i https://api.netscan.co/scan

Nachfolgend habe ich das versucht so umzusetzen:


var request = (HttpWebRequest)WebRequest.Create("https://api.netscan.co/user/turn");

var data = Encoding.ASCII.GetBytes(jsonString);
var apiKey = "XXXXXXXXXXXXXXXXXXXXX";
request.Method = "POST";
request.ContentType = "application/json; charset=utf-8";
request.ContentLength = data.Length;
request.Headers.Add($"x-netscan-auth: {apiKey}", "https://api.netscan.co/scan");

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

Leider funktioniert das so nicht (Exception: unzulässige Zeichen im Header). Mache ich da grundlegend etwas falsch bzw, ist das die richtige Vorgehensweise oder muss ich noch etwas encodieren???

Grüße Pico

Thema: ASP.NET MVC 5: Aktuellen Benutzer ermitteln
Am im Forum: Web-Technologien

Ja genau das ist ein AuthorizeAtrribute Filter:


public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new AuthorizeAttribute());
            filters.Add(new HandleErrorAttribute());
            filters.Add(new RequireSecureConnectionFilter());
        }

Thema: ASP.NET MVC 5: Aktuellen Benutzer ermitteln
Am im Forum: Web-Technologien

Wir nutzen einen Authorization Filter somit sind alle Controller nur über eingeloggte User verwendbar bzw müssen wir bei den entsprechenden Methoden die Zugänglich sein sollen das AllowAnonymus Attribut setzen.

Thema: ASP.NET MVC 5: Aktuellen Benutzer ermitteln
Am im Forum: Web-Technologien

Guten Abend zusammen,

wir haben eine asp.net Mvc 5 webanwendung. Wir nutzen asp.net identity 2.
Nun muss ich einem externen Service eine HttpGet Methode bereitstellen und diesem Informationen zum aktuell angemeldeten User übermitteln. Normalerweise frag ich innerhalb der Anwendung den angemeldeten User über "User.Identity.Name" ab.

Leider bekomme ich in diesem Fall (siehe unten) immer nur einen String.empty zurück. ich denke mal das diese Get Funktion nicht auf dem richtigen Context ist bzw den Context nicht kennt.

Wie kann man das Problem lösen bzw wie komme ich an die Informationen des angemeldeten Benutzers?

Danke für eure Hilfe!


[HttpGet]
    [AllowAnonymous]
    public ActionResult GetAppIdentity()
    {
        if (HttpContext.User.Identity.Name == string.Empty || HttpContext.User.Identity.Name == null)
        {
            return Json(new { success = "false", msg = HttpStatusCode.Unauthorized }, JsonRequestBehavior.AllowGet); ;
        }

        var appUser = UserManager.FindByNameAsync(HttpContext.User.Identity.Name).Result;

        AppAuthentication oa = new AppAuthentication();
        oa.Identity = new AppIdentity();

        oa.Identity.id = appUser.Id.ToString();
        oa.Identity.name = appUser.UserName;
        oa.Identity.role = MemberDataIdentityModel.UserRole.ToString(); ;

        return Json(oa, JsonRequestBehavior.AllowGet);
    }

Thema: Videokonferenz webbasiert
Am im Forum: Web-Technologien

Guten Abend zusammen,

ich möchte für eine Idee eine Art Videochat / Videokonferenz mit Audiofunktionen übers Internet entwickeln.
Ähnlich wie Skype nur webbasiert und wenn irgendwie möglich mit .net Technologien.

Welche Möglichkeiten seht ihr da bzw könnt ihr mir da Technologien dazu empfehlen?
Was haltet ihr von webRTC? Gibt's allerding nix für .net?!?!?

Grüße Pico

Thema: Hololens - Möglichkeiten in der Zukunft
Am im Forum: Smalltalk

Guten Abend,

Microsoft hat heute die Hololens vorgestellt Hololens - Golem

Was haltet ihr davon? Ich hoffe das Microsoft das ziemlich offen gestaltet und Entwickler Zugriff auf diese Brille haben.

Es wäre der Wahnsinn was mit dieser Brille und Augmented Reality alles Möglich wäre.
In vielen Branchen würde es so sehr Arbeit erleichtern können z.B. Architekten, komplette Baubranche, im Maschinenbau, Support von Geräten im privat und Business bereich, im Artikel steht was von NASA und ich denke da gibt's noch viel mehr dazu.

Bin begeistert!

Grüße Pico

Thema: Digitales IO Modul um Tastaturkombination zu senden
Am im Forum: Smalltalk

Danke für eure Infos,

habe jetzt ein USB IO Kit VM110N von Velleman gekauft, etwas teurer ca. 60€, funktioniert aber tadellos.

Grüße Pico

Thema: Digitales IO Modul um Tastaturkombination zu senden
Am im Forum: Smalltalk

Zitat
Müsste ein Gamepad nicht für sowas genügen

Leider reicht das nicht aus. Ich möchte auch noch über digitale Ausgänge verschiedene LEDs ansteuern, daher bräuchte ich schon ein EA Modul.

Grüße Pico

Thema: Digitales IO Modul um Tastaturkombination zu senden
Am im Forum: Smalltalk

Hallo zusammen,

ich bin auf der Suche nach einem Digitalmodul (bsp. USB) mit 3-10 Eingängen.
Und zwar möchte ich über drei digitale Schalter Tastaturkombinationen an ein Programm senden.

Am besten mit einem SDK für C# (notfalls auch für C++).

Habe mir das so vorgestellt, dass ich über einen Window Dienst die Schnittstelle zu dem IO Modul realisiere und dann je nach betätigtem Schalter eine bestimme Tastenkombo sende. (Mir ist schon klar dass das Programm welches die Combos empfangen soll immer den Fokus haben muss.....)

Vielleicht hat von euch jemand ne Empfehlung dazu welche Hardeware eingesetzt werden könnte.

Grüße Pico

Thema: WPF: Fehler beim Suchen nach Resourcenverzeichnis
Am im Forum: GUI: WPF und XAML

Zitat
Kannst du eine Sample-Solution anhängen, die den Fehler reproduziert
Wie kann ich hier eine Solution hochladen. Meine hat eine Größe von ca 3MB. Kann aber hier nur max 256KB hochladen?!?!Grüße Pico

Thema: WPF: Fehler beim Suchen nach Resourcenverzeichnis
Am im Forum: GUI: WPF und XAML

Zitat
du schreibst oben "Dicitionarys", aber verweist auf ein "Dicitionary"-Verzeichnis. War das nur ein Tippfehler?

Sorry war nur ein Tippfehler, habs oben korrigiert!

Grüße Pico

Thema: WPF: Fehler beim Suchen nach Resourcenverzeichnis
Am im Forum: GUI: WPF und XAML

Hallo zusammen,

ich komme gerade mit meinen zwei Resourcenverzeichnissen nicht klar, und zwar habe ich ein ResourceDictionary "CustomEllipse" und ein ResourceDictionary "CustomRectangle" in einem Projektunterverzeichnis "Dictionary".

Die Buildeigenschaften beider ResourceDictionarys steht auf "Resource".

Nun möchte ich diese in der App.xaml zusammenfügen.

Dazu:


   <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>                
              <ResourceDictionary Source="Dictionary/CustomEllipse.xaml"/>
                <ResourceDictionary Source="Dictionary/CustomRectangle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>

Leider bekomme ich hier aber einen Fehler "Fehler beim Suchen nach Ressourcenverzeichnis "Dictionary/CustomEllipse.xaml" und "Fehler beim Suchen nach Ressourcenverzeichnis "Dictionary/CustomRectangle.xaml".

Aber wieso? Das sollte doch alles soweit passen....steh hier irgendwie auf dem Schlauch?!?!

Dazu wird noch ein weiterer Fehler angezeigt aber mit dem kann ich leider auch gar nichts anfangen: "Inheritor of the ResourceDictionary is expected".

Hoffe mir kann jemand helfen!

Grüße Pico

Thema: WPF- Custom Shape bzw. Ellipse
Am im Forum: GUI: WPF und XAML

Hallo zusammen,

ich benötige für mein Projekt ein Ellipse Control mit Zusatzfunktionalität.
Und zwar möchte ich die Ellipse/Rectangle etc. abhängig von einem bestimmten Status
animiert einfärben...rot/gelb....blinkend......

Würdet ihr da ein eigenes Ellipsen Control schreiben oder ein benutzerdefiniertes Steuerelement nehmen????

Grüße Pico

Thema: Silverlight - UI Objekte über Server Callback animieren
Am im Forum: GUI: WPF und XAML

Kannst du mir mal ein Codebeispiel zeigen? Kann es mir noch nicht so richtig vorstellen wie du das genau machst!

Grüße Pico

Thema: Silverlight - UI Objekte über Server Callback animieren
Am im Forum: GUI: WPF und XAML

Zitat

Warum machst du dir auf dem Client nicht ein Objekt welches den Wert repräsentiert (bei mir ist das das Tag Objekt). Dieses Implementiert INotifyPropertyChanged, und du Bindest die Propertys welche sich bei bei Änderung ändern sollen, an eine Property des Tag Objekts?

Mir gefällt nicht, dass ich für jede SPS Variable eine Property brauche welche dann an mein UI Object gebunden ist. In diesem Fall müsste ich ja für jede Variable händisch eine Property anlegen.

Wir haben ja bisher HTML und jquery verwendet, dort hatte ich eine Javascript Funktion die vom Server aufgerufen wurde und über diese eine Funktion habe ich alle UI Elemente animiert, dies hat natürlich eine enorme zeitersparnis und quellcodeeinparung zur Folge.

Dies müsste doch auch mit Silverlight funktionieren?!?!?

Grüße Pico

Thema: Silverlight - UI Objekte über Server Callback animieren
Am im Forum: GUI: WPF und XAML

ich bekomme die Daten von Server in diesem Format


private void ObjectColoring(string signalName, int signalValue, string objectId)

Also hier die ObjectId bzw. den Objektnamen meines Silverlight Objektes.
Anhand diesem string müsste ich dann auf das UI Objekt zugreifen können.......

Könnte auch die Callback Signatur ändern und zum Beispiel das ganze UI Object übergeben:


_actionHandler.AddSignalActionHandler("SPS1_01_01", ellipse1, ObjectColoring);

Nur das Problem ist das ich ja verschiedene UI Elemente habe also nicht nur ellipsen.

Wie kann ich dann auf diese Elemente über die Callback Methode zugreifen?


private void ObjectColoring(string signalName, int signalValue, Ellipse ellipse)

Grüße Pico

Thema: Silverlight - UI Objekte über Server Callback animieren
Am im Forum: GUI: WPF und XAML

Ich denke nicht das Silverlight tot ist...aber wie gfoidl schon schrieb das ist ein anderes Thema und hat mit meiner Fragestellung nicht direkt was zu tun!

Ich habe diverse Gründe warum ich vorerst noch Silverlight nutzen möchte!

Und deswegen hoffe ich auch dass mir trotzdem noch jemand Tipps zu meinem Problem geben kann ;)

Grüße Pico

Thema: Silverlight - UI Objekte über Server Callback animieren
Am im Forum: GUI: WPF und XAML

Hallo zusammen,

ich muss etwas ausholen um mein Problem zu schildern.

Ich entwickle nun seit über 1,5 Jahren ein Visualisierungssystem für Industrieanlagen.
Dieses System arbeitete in der Vergangenheit folgendermaßen:

Über eine WPF Öberfläche können Daten (Variablen aus SPS Steuerungen etc.) in einer SQL Datenbank verwaltet werden.

Ein WCF Dienst übernimmt die Kommunikation mit der Steuerung der Industrieanlage und frägt die vorher projektierten Variablen (Datenbank) nach ihren aktuellen Werten ab.

Ein HttpLongPoll Server veröffentlich diese Daten nach dem Publisher/Subscriber Modell an die Clients (Webseite).

Bisher waren die Clients reine Html Seiten welche über JavaScript (jQuery) Daten des Server konsumiert haben.

Nun möchte ich auf Silverlight umstellen.

Mein Problem ist hierbei nur die Oberfläche und das ViewModel so zu gestalten, dass das Model unabhängig von der Oberfläche bleibt.

Die View kann immer verschiedene Objekte enthalten. Diese Objekte sollen je nach Wert aus der Anlagensteuerung farbig animiert werden.

Dazu registriere ich die interessanten Variablen am HttpLongPoll Server und bekomme falls diese sich ändern über einen Callback aktuelle Werte zurück!


//Signale registrieren (Variablenname, zu animierendes Objekt (z.B Rectangle), callback methode
 _actionHandler.AddSignalActionHandler("SPS1_01_01", "Test1", ObjectColoring);
 _actionHandler.AddSignalActionHandler("SPS1_01_02", "Test2", ObjectColoring);
 _actionHandler.AddSignalActionHandler("SPS1_01_03", "Test3", ObjectColoring);  
 _actionHandler.RegisterSession(OnErrorEx);


//Callback
private void ObjectColoring(string signalName, int signalValue, string objectId)
{
            this.Dispatcher.BeginInvoke(() => AddLine(signalName + ": " + signalValue + " " + objectId));


            if (signalValue == 0)
            {
                Dispatcher.BeginInvoke(() =>
                {
//die UI Elementanimation muss dynamisch erfolgen
                    ellipse1.Fill = new SolidColorBrush(Colors.Gray);
                    rectangle1.Fill = new SolidColorBrush(Colors.Gray);
                    textBox1.Background = new SolidColorBrush(Colors.Gray);
                });
                return;
            }
            if((signalValue & 0x100) > 0)
            {
//die UI Elementanimation muss dynamisch erfolgen
                Dispatcher.BeginInvoke(() =>
                                           {
                                               ellipse1.Fill = new SolidColorBrush(Colors.Green);
                                               rectangle1.Fill = new SolidColorBrush(Colors.Green);
                                               textBox1.Background = new SolidColorBrush(Colors.Green);
                                           });                        
            }
          
        }

Über die Callback Methode "ObjectColoring" bekomme ich alle aktuellen Daten und den Objektnamen (objectId) des UI Elementes zurück.

Nun möchte ich dies aber dynamisch haben => also nicht statisch über
ellipse1.Fill = new SolidColorBrush(Colors.Gray);

sondern gültig für alle Objekte auf der UI.

Wie kann ich vom String objectId auf meine Controls zugreifen?
Ich kann mit dieser Lösung auch nicht vermeiden, dass mein ViewModel die UI Objekte kennen muss.

Vielleicht hat von euch jemand noch einen anderen Lösungsansatz....

Hoffe ich habe mich einigermaßen verständlich ausgedrückt. Gar nicht sooo leicht zu erklären....

Grüße Pico

Thema: IP Scanner- Geschwindigkeit optimieren
Am im Forum: Netzwerktechnologien

Zitat
bei der If-Abrage war das Return nicht angebracht, dies beendet die schleifen komplett...

Das ist so nicht richtig, das Return beendet hier nur die Methode durch die Schleife wird sie aber wieder aufgerufen!


lock (connectors)
{
      connectors.Add(connector);
 }

oder


var lockObject = new Object();

lock (lockObject)
{
      connectors.Add(connector);
 }

Grüße Pico

Thema: IP Scanner- Geschwindigkeit optimieren
Am im Forum: Netzwerktechnologien

Zitat von Abt
Bei sowas bietet sichnes doch gerade zu an alles zu kodularisieren und zu parallelisieren...

Da ich mit der TPL bisher noch nicht gearbeitet habe hatte ich mich noch nicht daran getraut.

Habe es nun aber mit einer Parallel.For Schleife probiert:


  public static IEnumerable<Connectors> BrowseConnector(string ipAdress)
        {                     
            var ipSub = ipAdress.Split('.');
            var connectors = new List<Connectors>();
            var localIpSubstring = String.Join(".", ipSub, 0, 3);          

            Parallel.For(1, 255, i =>
                {                   
                    var tempConfig = new PLCConnectionConfiguration("tempConfig" + i);
                    var tempConn = new PLCConnection(tempConfig);                                        
                    var nextIp = String.Concat(localIpSubstring, ".", Convert.ToString(i));
                                                       
                    if (!IpScanner.Ping(nextIp, 1, 500)) return;
                        tempConfig.CpuIP = nextIp;
                        Console.WriteLine("Found " + nextIp);
                        try
                        {
                            tempConn.Connect();
                            var connector = new Connectors { RemoteName = nextIp };
                            connectors.Add(connector);
                            tempConn.Disconnect();
                        }
                        catch (Exception)
                        {
                            Console.WriteLine(nextIp + " isn't a PLC");
                        }
                    }
                
                );          
            return connectors;
        }

Damit benötigt das Scannen für das ganze Segment nur noch ca. 20 sec.
Also ein enormer Unterschied.

Jetzt ist nur die Frage ob das auch alles so richtig programmiert ist oder ob es irgendwo Zugriffsprobleme geben kann???

Insbesondere stört es mich hier, dass ich bei jedem Schleifendurchgang ein neues PLCConfig Objekt und ein neues PLCConnection Objekt erstelle.

Grüße Pico

Thema: IP Scanner- Geschwindigkeit optimieren
Am im Forum: Netzwerktechnologien

Zitat
einen viel höheren timeout besitzt, der die Laufzeit negativ beeinträchtigt?

Da hast du schon recht! Das Connect hat einen viel höheren Timeout!
Aber ich denke auch, dass der Timeout beim Pingen zu klein ist, habe den nur mal zum testen verringert.
Timeout verringern löst also mein Problem nicht!

D.h. ich bin momentan ziemlich ratlos wie ich da die Performance verbessern kann!
Zitat
- Wenn du die BrowseConnector Methode nicht spezialisiert planst, dann verarbeite die Subnetzmaske noch. Das Segment muss nicht zwingend von 1-254 reichen.

Das könnte ich natürlich noch tun, aber in dem Netzwerk wo die Software eingesetzt wird ist die subnetzmaske immer 255.255.255.0

Aber du hast recht, so gehört das schon rein!

Grüße Pico