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;
}
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.
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.
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:
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?
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.
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.
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???
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.
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);
}
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?!?!?
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.
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.
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.
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".
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????
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?!?!?
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:
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 ;)
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....
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