Laden...

Forenbeiträge von Seikilos Ingesamt 753 Beiträge

24.01.2014 - 15:48 Uhr

Was mir gerade auffällt, ein Teil der Frage ist noch offen, ob man bei Verletzung von Constraints mehr Details bekommen kann.> Fehlermeldung:

The 'name' attribute is invalid - The value '' is invalid according to
its datatype 'NonEmptyStringNoWhitespacesAtBeginningAndEnd' - The
Pattern constraint failed.

Erfordert einen Blick in die XSD um genau sagen zu können, was fehlgeschlagen ist. auch wenn der lange Name versucht es bereits auszudrücken.

Der XML Parsers von Notepad++ ist wesentlich Aussagekräftiger:> Fehlermeldung:

ERROR: Element 'LightSource', attribute 'name': [facet 'minLength'] The value '' has a length of '0'; this underruns the allowed minimum length of '1'.
ERROR: Element 'LightSource', attribute 'name': [facet 'pattern'] The value '' is not accepted by the pattern '.*\S'.
ERROR: Element 'LightSource', attribute 'name': '' is not a valid value of the atomic type 'NonEmptyStringNoWhitespacesAtBeginningAndEnd'.

Hängt das generell mit der Validator Implementierung in .net zusammen? Die Exception für solche Fälle gibt leider nicht mehr her.

15.01.2014 - 16:14 Uhr

Ich muss sagen, ich bin irritiert.
Ich habe diese Werte bereits im Debugger betrachtet und sie waren damals immer 0 und 0.

Wahrscheinlich habe ich zu dem Zeitpunkt ein in-memory XML mit dem XDocument validiert, klar dass es dort keine Zeilen geben kann.

Danke.

15.01.2014 - 15:15 Uhr

Ich generiere XML Daten und muss auf der XSD Ebene eine Validierung durchführen.

Gängige Techniken wie XmlDocument.Validate, XDocument.Validate und XmlReader mit einem ValidationEventHandler sehen alle recht ähnlich aus:


public void Validate()
{
  var schemas = new XmlSchemaSet();
  schemas.Add("", fullXsdPath);
  var doc = XDocument.Load(metaXmlFile);
  doc.Validate(schemas,ValidationEventHandler);
}

public void ValidationEventHandler(object sender, ValidationEventArgs e)
        {
            switch (e.Severity)
            {
                case XmlSeverityType.Error:
                    Console.WriteLine("Error: {0}", e.Message);
                    break;
                case XmlSeverityType.Warning:
                    Console.WriteLine("Warning {0}", e.Message);
                    break;
            }

        }

liefern aber sehr magere Ergebnisse aus.
Ich bekomme Meldungen wie > Fehlermeldung:

The 'name' attribute is invalid - The value '' is invalid according to
its datatype 'NonEmptyStringNoWhitespacesAtBeginningAndEnd' - The
Pattern constraint failed.

Diese Meldung hilft mir jedoch nicht weiter, weil es weder den XML Kontext im Sinne von ein paar Zeilen XML um die Stelle herum zeigt noch eine Zeile oder ähnliches ausgibt, wo ich gucken muss.

Die XML kann sehr groß werden und nicht alle "name" attribute sind obligatorisch. Bestimmte Typen können einen Leerstring haben, usw. Aus dieser Meldung ist nicht sehr leicht ableitbar, wo das Problem ist.

Notepad++ mit den XML Tools liefert mir diesbezüglich folgende Ausgabe

Fehlermeldung:
ERROR: Element 'LightSource', attribute 'name': [facet 'minLength'] The value '' has a length of '0'; this underruns the allowed minimum length of '1'.
ERROR: Element 'LightSource', attribute 'name': [facet 'pattern'] The value '' is not accepted by the pattern '.*\S'.
ERROR: Element 'LightSource', attribute 'name': '' is not a valid value of the atomic type 'NonEmptyStringNoWhitespacesAtBeginningAndEnd'.

Damit kann man deutlich mehr anfangen, auch wenn die Antwort sehr technisch ist, so ist doch zumindest das Element zu sehen.

Gibt es einen Weg, wie man deutlich mehr Informationen durch die C# Validierungen bekommen kann?

29.10.2013 - 13:58 Uhr

Hallo,

wir haben eine executable, dessen Assembly version beim Bauen automatisch generiert wird:

[assembly: AssemblyVersion("1.1.*")]

Diese Anwendung benutzt die user.config um eigene Einstellungen abzulegen. Dafür wurde eine eigene ConfigurationSection definiert und im Code benutzt.
Diese Anwendung benutzt nicht die Settings (welche ja auch in die gleiche user.config geschrieben werden)

Was mir jetzt fehlt, ist ein Verständnis, wie man die user.config aus roaming migrieren soll, wenn man eine neue Version aufspielt.

Aktuell wird immer eine Config unter
C:\Benutzer[Benutzer]\AppData\Roaming[CodePath]\AssemblyVersion\user.config abgelegt.

jeder Build erzeugt eine Version wie 1.1.5000.23456 oder 1.1.5000.34567.

Wie migriert man diese Configs auf die aktuelle Version? Mit den Buildnummern ist bei uns das Problem verschärft, weil bei jedem Build, aber wenn ich die Anwendung auf 1.2 stelle, so muss es doch möglich sein, die Version zu migrieren, oder?

Im Netz findet man für Settings so etwas wie ApplicationSettingsBase.Upgrade, aber da ich keine Settings habe, nützt mir das nicht sehr.
Desweiteren gibts noch "manuelle Copy" Lösungen, die ich sehr unglücklich finde, weil hier keine (etwaige) Strukturanpassung gibt.

12.07.2013 - 09:58 Uhr

.net zu .net waren die Anforderungen, klappt natürlich auch gut.

Jetzt gibts ein seitliches Requirement, dass ein gewisser Satz aus Befehlen auch ohne WCF gehen soll. Aktuell ist das mit einem manuellen TCP Listener gelöst, aber die Doppelung der Aufrufe ist umständlich, daher wollte ich mal gucken, ob ich WCF faken kann.
Damit Linux, oder nicht .net Technologie drauf zugreifen kann.

Da ist es fast einfacher, über Reflection das Interface generisch an den TCP Listener zu binden, aber dabei habe ich das Gefühl, als würde ich die Arbeit von WCF nochmal in schlecht machen 😕

12.07.2013 - 07:13 Uhr

Hallo,

bezüglich des XML, muss der Request auch ein XML sein, oder ist die Anfrage eine URL im Sinne von .../GetMethodeAufInterace/Param1/Param2?

Ich hatte mit web requests und WebGet Attributen und der Konfig rumgespielt. Auf die http Seite des Service bin ich gekommen, aber ich hab keine Parameter Übergabe zusammenbauen können, die einen Sinn ergibt.

TCP ist ein wenig komplizierter, weil ich nicht genau sehen, was da rüber geht. Hab zwar den Traffic mitgeschrieben, aber die Requests konnte ich nicht reproduzieren, wenn ich diese mit nem TcpWriter wiederholt habe. Vor allem weil der Request eine URL darstellt, die in dem Intranet nicht mal gültig ist.

Ich denke das Hauptproblem ist, dass ich keine Ahnung von WCF habe und kein ASP.net einsetzen will.

11.07.2013 - 11:38 Uhr

Hallo,

gibt es eine Möglichkeit, in die WCF Kommunikation manuell einzugreifen?

Endpoints werden ja, wie in diesem Beispiel definiert

<endpoint address="net.tcp://localhost:8002/MyProject"  binding="netTcpBinding"  contract="SomeContract.IMyContract" />

Die Kommunikation ist über TCP aufgebaut, Client und Server kommunizieren problemlos miteinander.

Nun frage ich mich, ob es möglich ist, einen Client komplett manuell zu implementieren und Befehle per Hand abzusetzen. Ich kenne mich nicht sehr gut aus, wie kompliziert der WCF Handshake bei der Verbindung ist.

Der Hintergrund ist die Frage, ob es möglich ist, einen Client zu schreiben, der nichts über den Kontrakt kennt, aber dennoch auf einer grundlegenden Ebene mit dem Server kommuniziert.
Natürlich müssten Daten, die sonst über WCF de/serialisiert worden sind weggelassen oder per Hand verarbeitet werden, aber wären damit einfache Befehle möglich?

04.07.2013 - 09:22 Uhr

Nur ein Hinweis, der eventuell in die richtige Richtung führt:
Meiner Meinung nach, müsstest du in der Lage sein, ein Style mit einem Trigger zu definieren, der auf die Row angewendet wird, wenn der korrekte Trigger, wie "BeginEdit"? gefeuert wird. Im Style kannst du dann die Farbe ändern.
(ungetestet)

26.05.2013 - 14:13 Uhr

Internal finde ich gut. Das könnte es sein.

Im GUI verwendest du die Schnittstelle; das GUI kennt die Klasse gar nicht. In der Logik verwendest du die Klasse und die Schnittstelle interessiert dich nicht. Was spricht bei dir dagegen?

Wenn das Interface IProject ist und die GUI übergibt immer das IProject an die Logik, so muss bei jeder Übergabe an die Logik das IProject in ein Project gecastet werden, damit Setter benutzt werden können.
Jede Logik Methode, die ein IProject bekommt, muss daher casten.

26.05.2013 - 12:13 Uhr

Wenn es das übliche Vorgehen ist, stelle ich mich dem nicht entgegen, ich finde nur das casten in jeder einzelnen Methode der Logik etwas mühsam.

Bei der GUI stimme ich dem zu, dass ist elegant gelöst.

26.05.2013 - 11:52 Uhr

Hallo,
ich bin bei der Lösung unschlüssig.
Der Contract hat dann nur die Getter, das ist ein Vorteil, aber alle Operationen auf der Logik erfordern dann das casten in die private Klasse.

Ist das der übliche Weg?

26.05.2013 - 10:57 Uhr

Hallo,

bei einem Projekt habe ich ein Austauschobjekt, welches Projekt heißt und so aussieht:


    public class Project
    {
        public string Path { get; set; }
        public bool Active { get; set; }
    }

Diese Objekte generiert die Logik und gibt sie nach Außen (GUI), welche diese dann anzeigt.
Weil die GUI diese Objekte vorhält und braucht, um Operationen in der Logik zu triggern, reicht die GUI bei Anfragen, wie z.B "Logic.SetProjectActiveStatus(Project, bool)" das Projekt und einen bool rein.
Die Methode selber führt dann so etwas aus wie:


project.Active = false;
// Weitere Statewechsel, File IO, etc

Nun bin ich selber wegen der Unzulänglichkeit dieses Ansatz auf die Nase gefallen.
Da der Datencontainer mutable ist, hab ich in einem Unit Test anstatt des Umwegs über Logic.SetProjectActiveStatus Active manuell auf false gesetzt, denn SetProjectActiveStatus hatte bis dato nur Active = false.
Jetzt aber, durch mehr Logik in der Logik schlagen recht viele der Tests fehlt.

Hier fehlt mir ein bisschen das friend Konzept aus C++.

Wie wird das generell gehandhabt? Ich will keine Logik in die Datencontainer, d.h das Property Active soll nicht mehr tun (kann es auch garnicht, der Kontext fehlt).
Den Container immutable zu machen gefällt mir auch nicht, weil ich jedes mal neue Project instanzen erzeugen muss, die dann zur GUI, etc wandern. Dadurch muss ich die Datenhaltung in der GUI ändern, weil die Projekte nicht mehr vergleichbar sind. Außerdem muss ich die Projekte wegen so etwas wie einem geänderten Active Flag klonen.

Was würde man da machen? Eine INotifyPropertyChanged Schnittstelle wäre denkbar, aber ich will ja nicht, dass GUI auf den Daten etwas macht.

25.05.2013 - 13:40 Uhr

Hallo herbivore,

danke für die Antwort. Ich bin bei meinen Versuchen auch zu einem ähnlichen Schluss gekommen.
Ich dachte, dass ich eventuell was übersehe, so etwas ist ja immer nur so lange nicht möglich, bis es einer macht 😃

21.05.2013 - 14:07 Uhr

Mir geht es da genauso. Als ich im Delirium nach den Attributen gesucht habe, war ich auch der Meinung, dass es so

void M (String caller = [CallerMemberName])

aussehen würde, weil es für mich intuitiv wäre

21.05.2013 - 08:56 Uhr

Vor einiger Zeit hat Ralph Westphal das Konzept des RequestWithResponsePins vorgestellt. Da geht es um Event-Basierte Programmierung und dem Problem, dass das Abschicken einer Frage aus Methode A durch Events als Antwort in einer Methode B zurück kommt und damit die Geschäftslogik stückelt.

Um die Antwort in der gleichen Methode zu bekommen, in der die Frage gestellt worden ist, hat er die Klasse RequestWithResponsePin vorgestellt:


using System;

namespace RequestWithResponsePin
{
   public class RequestWithResponsePin<TRequest, TResponse>
   {
      public RequestWithResponsePin(TRequest data, Action<TResponse> responsePin)
      {
         Data = data;
         ResponsePin = responsePin;
      }

      public TRequest Data { get; private set; }
      public Action<TResponse> ResponsePin { get; private set; }
   }

   public static class RequestExtensions
   {
      public static void Request<TRequest, TResponse>(this Action<RequestWithResponsePin<TRequest, TResponse>> outputPin, TRequest data, Action<TResponse> responsePin)
      {
         outputPin(new RequestWithResponsePin<TRequest, TResponse>(data, responsePin));
      }
   }
}


Das ermöglicht weiterhin Event-basiert zu arbeiten, á la Event Based Components (EBC), aber die Logik zu konzentrieren.
Das Verbinden der Events mit Handlern kann über ebc.componentbinder dann sogar automatisch folgen, usw.

Hier ein Beispiel (Event und Handler in einer Klasse, würde man auf verschiedene Komponenten aufteilen):


public class EBCDemo
   {
      public event Action<RequestWithResponsePin<string, bool>> OnSomething;

      public void ProcessSomething(RequestWithResponsePin<string, bool> req )
      {
         var str = req.Data; // mach was

         // Antwort
         req.ResponsePin(true);
      }

      public void Start()
      {
         var result = false;
         // Event feuern und Antwort bekommen
         OnSomething.Request("mein input", output => result = output );

         Console.WriteLine("Antwort {0}", result);
      }
   }

Und so wird es benutzt:

 [STAThread]
      static void Main()
      {

         var ebcDemo = new EBCDemo();
         // Bind
         ebcDemo.OnSomething += ebcDemo.ProcessSomething;
         
         ebcDemo.Start();

      }

Eine recht feine Sache, welche die Abhängigkeiten der einzelnen Komponenten lösen kann.

Mein Problem ist, wie kann ich dieses Konzept in die Welt von async und await bringen?
Der Vorteil von async/await ist, dass ich ähnlich wie beim RequestWithResponsePin die Logik zusammen halten kann. Hier nur auf Threads bezogen, die länger dauern.
Ich muss also nicht auf nen BackgroundWorker.RunWorkerCompleted warten, und dort den Rest der Geschäftslogik fortsetzen.

Wenn ich also im obrigen Beispiel in ProcessSomething ein Thread.Sleep(3000) mache, so friert die Ausführung ein. In der Konsole merkt man dies nicht, in der Gui schon.
Allerdings bekomme ich es nicht hin, den RequestWithResponsePin async fähig zu machen.
Entweder es geht nicht, oder ich habe zu wenig Erfahrung mit async (was wahrscheinlicher ist 😃 )

Damit das ganze async funktioniert müsste meines Verständnisses nach das bool in OnSomething und ProcessSomething als Task<bool> verpackt werden.

Die ProcessSomething würde dann so aussehen müssen:


      public void ProcessSomething(RequestWithResponsePin<string, bool> req )
      {
         var str = req.Data;
         var res = await Task.Run(
            () =>
            {
               Thread.Sleep(3000);
               return true;
            }
         );
         req.ResponsePin(res);
      }

Geht natürlich nicht, weil die Methode async modifier braucht (kein Problem) aber auch einen Task returnen muss.
Da aber der Return-Value dieser Methode nicht benutzt wird, sondern quasi zur nächsten Action über req.ResponsePin(true); propagiert wird, bekomme ich keine Asynchronizität dadurch.
Ferner habe ich das Gefühl, als müsste das bool im req in ein Task gewrappt werden, was dann aber über req.ResponsePin(res); nicht mehr zurückgegeben werden kann.

20.05.2013 - 10:01 Uhr

Hallo herbivore,

das war die Seite mit den Beispielen für Caller Attributes:
An Introduction to New Features in C# 5.0

Die hat nur eine furchtbare Sourceformatierung, aber immerhin sieht man wie Caller Attributes eingesetzt werden können.

19.05.2013 - 20:07 Uhr

Ah mist. Es ist C# 5.0 (Hab die Version verwechselt)

Was ich suchte sind die Caller*:


public void Log([CallerMemberName] string Message = "")
{
}
19.05.2013 - 20:01 Uhr

Vor einiger Zeit habe ich über die neuen .net 4.5 und C# 4.0 Features gelesen.
Darunter waren die optionalen Argumente.
Nun wurde in dem Zusammenhang ein nettes Feature aufgeführt, was ich einfach nicht mehr finden kann.

Es ging um eine Möglichkeit logging sehr bequem zu machen. Optionale Argumente sehen ja so aus:


public void Foo(string msg = "irgend ein string") {}

Nun wurde in dem Beispiel eine Signatur benutzt, bei dem der Default Wert scheinbar ein vom Compiler oder Precompiler belegter Wert ist.
Eine Log Signatur sieht dann so aus


public void Log(string method = [Method]) {}

Wenn man dann irgendwo


Log();

benutzt, dann wird vom Compiler [Method] automatisch gefüllt.

Ich habe deutlich die eckigen Klammern in Erinnerung, aber ich finde nirgend die Beschreibung dieses Features.

Entweder ich bringe es durcheinander, oder das war nur Pseudocode.

04.03.2013 - 14:10 Uhr

Hallo,
jetzt sehe ich es. Vorhin hatte ich den Abschnitt über Components wohl übersehen.

Danke

04.03.2013 - 13:59 Uhr

Hallo,
kannst du mir den Link geben?
Ich habe hier Overview of the .NET Framework und Getting Started with the .NET Framework nichts finden können

Danke

04.03.2013 - 13:42 Uhr

Hallo,

ich finde keine konkrete Information darüber, ob ich ein Plugin mit VS2012 und .net 4.5 schreiben kann, welches in einer in 3.5 geschriebener Anwendung läuft.

Die Applikation lädt die dll zur Laufzeit, die 4.5 Assembly wird nicht in der Applikation referenziert. Soweit ich gegoogelt habe, dürfte das nicht gehen.
Die Struktur sieht ungefähr so aus:
Applikation referenziert CommonInterface.dll beide sind 3.5
Plugin in 4.5 referenziert CommonInterface.dll
Applikation lädt zur Laufzeit Dlls im Ordner Plugions und sucht nach der jeweiligen Interface Implementierung.
Das Plugin selber soll nicht re-targeted werden, sondern nach Möglichkeit mit 4.5 laufen.
Wenn das Plugin jetzt laufen würde, weiß ich nicht, wie die Aufrufe von 3.5 nach 4.5 und wieder zurück behandelt werden.

Danke

16.01.2013 - 13:55 Uhr

Denkbare wäre ein Hintergrundprozess, der prüft, ob die Zielanwendung reagiert. Wenn sie es nicht mehr tut, spawnst du diese neu.

Prüfen, ob eine Anwendung noch reagiert geht mit der Google-Suche leicht zu finden. z.B Ermitteln, ob ein Prozess reagiert

15.01.2013 - 09:15 Uhr

Eine recht banale Antwort: Wenn du den Algorithmus oder das Verarbeiten nicht stückeln kannst, dann bleibt dir nicht viel mehr, als die Anwendung mit 64 bit zu kompilieren und soviel Arbeitsspeicher nach zulegen, bis die Datei als ganze gelesen werden kann.

Pagefile Größe könnte man Erhöhen, aber damit hast du keine Performance Vorteile gegenüber dem Stückeln. Auf Platte ist auf Platte

08.08.2012 - 09:30 Uhr

Hallo,
nimm eine For-Schleife mit dem Count der Einträge der Liste und setze jeden einzelnen auf unchecked.

Edit: Hier gibt es eine Liste der geheckten Elemente CheckedListBox.CheckedItems-Eigenschaft

11.07.2012 - 13:54 Uhr

Hallo,

die Meldung ist > Fehlermeldung:

Programm funktioniert nicht mehr

Ein Problem hat die richtige Ausführung dieses Programms verhindert. Schließen Sie das Programm.
-> Programm schließen

Event log> Fehlermeldung:

Protokollname: Application
Quelle: Application Error
Datum: 11.07.2012 13:32:56
Ereignis-ID: 1000
Aufgabenkategorie:(100)
Ebene: Fehler
Schlüsselwörter:Klassisch
Benutzer: Nicht zutreffend
Computer: name
Beschreibung:
Name der fehlerhaften Anwendung: programm.exe, Version: 8.31058, Zeitstempel: 0x4fc79915
Name des fehlerhaften Moduls: KERNELBASE.dll, Version: 6.1.7601.17651, Zeitstempel: 0x4e211319
Ausnahmecode: 0xe0434f4d
Fehleroffset: 0x0000b9bc
ID des fehlerhaften Prozesses: 0x%9
Startzeit der fehlerhaften Anwendung: 0x%10
Pfad der fehlerhaften Anwendung: %11
Pfad des fehlerhaften Moduls: %12
Berichtskennung: %13
Ereignis-XML:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Application Error" />
<EventID Qualifiers="0">1000</EventID>
<Level>2</Level>
<Task>100</Task>
<Keywords>0x80000000000000</Keywords>
<TimeCreated SystemTime="2012-07-11T11:32:56.000000000Z" />
<EventRecordID>8456</EventRecordID>
<Channel>Application</Channel>
<Computer>name</Computer>
<Security />
</System>
<EventData>
<Data>programm.exe</Data>
<Data>8.231058</Data>
<Data>4fc79915</Data>
<Data>KERNELBASE.dll</Data>
<Data>6.1.7601.17651</Data>
<Data>4e211319</Data>
<Data>e0434f4d</Data>
<Data>0000b9bc</Data>
</EventData>
</Event>

Ich habe mit VS da remote nativ remote debuggt und einen Callstack mit wow64.dll usw bekommen, also tief in Windows selber.

Was mich irritiert ist, wenn eine DLL nicht gefunden worden ist (dll in einem Plugin, usw) dann hätte doch sxstrace etwas liefern müssen und das tat es nicht.

Anwendung ist 32 bit und Zielframework 2.0

11.07.2012 - 13:05 Uhr

Hallo,
ich habe hier ein interessantes Problem.
Ein Windows 7 64 bit Ultimate mit .net 3.5 und eine executable, bei der im IL-Disassembly

// Metadata version: v2.0.50727

steht.
Wenn die Exe auf dem Rechner gestartet wird, steht da nur "Exe funktioniert nicht mehr" und ich kann nur noch beenden. Keine weitere Info, nichts zum aufklappen.
Auf dem Rechner ist kein VS drauf.

Nun müsste aber mit 3.5 ja das 2.0 dabei sein. Denn wenn ich versuche .net 2.0 zu installieren, sagt er mir, dass es bereits drauf ist.
Unter Programme steht es aber nicht aufgeführt. Daher schließe ich daraus, dass 2.0 Assembly mit 3.5 installiert worden sind. 3.5 ist unter Windows Features angehakt.

Jetzt frage ich mich, wie sieht die Fehlermeldung aus, wenn das passendere Framework nicht da ist? Es wurde keine sxs Meldung ausgegeben, dass irgendeine spezifische Version einer Assembly nicht gefunden worden ist, sondern wirklich nur "Funktioniert nicht mehr"

Ich habe schon das 2.0.5er Compact Framework zusätzlich installiert. Kein Erfolg

P..S: Die FAQ habe ich durch geguckt

18.04.2012 - 08:35 Uhr

Ich kenne Freemind (für MindMaps).
BizAgi Process Modeler für Workflows
IHMC CmapTools

Guck dir die mal an. Vielleicht von unten nach oben 😃

14.03.2012 - 15:38 Uhr

Das ist trotzdem ungewöhnlich.
Wo ist denn die Far-clipping plane?

14.03.2012 - 15:01 Uhr

Wie weit sind die Objekte vom Nullpunkt entfernt?

09.03.2012 - 10:23 Uhr

Dictionary ist eine Art HashSet, bei dem zu jedem Hash Key ein Value zugewiesen wird.
Du brauchst also nur Dictionary<string, int>

Konkrete Antwort auf die Frage: Ja, da es generisch ist, kannst du auch Dictionary<HashSet<string>, int> schreiben, macht aber keinen Sinn.

09.03.2012 - 09:32 Uhr

Wenn er jedoch wirklich große Mengen an Daten liest, müsste er nicht zeilenweise, sondern in Chunks die Daten lesen.

Wäre interessant, bei welcher Chunk Größe Boyer-Moore StartsWith überholen würde

09.03.2012 - 09:21 Uhr

Uuuh, HashSet, wo warst du mein Leben lang! 😄

@Mathias Lauth: Was spricht gegen eine implizite Filterung von redundanten Einträgen durch Dictionary oder HashSet?

Ich stimme überein, dass man ein Problem nach dem anderen lösen sollte, aber hier fällt die Filterung ja quasi "kostenlos" nebenbei heraus.

Mich würde jedoch interessieren, wie sich Boyer-Moore zum StartsWith verhält

09.03.2012 - 09:06 Uhr

Funktioniert deine Lösung nicht, ist sie zu langsam?

Was ist Elegant? Schneller, speicher-effizienter?

Dein Frage ist zu unkonkret.

Mögliche Ansätze:
Du brauchst nicht die ganze Datei auf einmal einlesen sondern kannst es zeilenweise machen.

Desweiteren könntest du ein Dictionary<string,int> benutzen, dann müsstest du dich nicht über das contains kümmern und könntest z.B. zählen, wie oft der jeweilige User-Agent drin war

23.02.2012 - 14:51 Uhr

Kannst du, du müsstest nur in der Config einstellen, welche Seite der Server öffnet, wenn er zu den Entschluss kommt, eine Default Seite anzeigen zu müssen

23.02.2012 - 14:46 Uhr

Danke für die schnelle Antwort.

Hab die Default.aspx nur umbenannt.
muss wohl daran gelegen haben. Aber warum? Schreibweise ist richtig, also hinten das .aspx

Der Webserver versucht per Default, wenn keine Seite angegeben worden ist, die Default.aspx Seite zu laden. Wenn diese nicht da ist, dann kann er diese auch nicht anzeigen. Er weiß ja nicht, in was du sie umbenannt hast.

Der Server scheint so konfiguriert zu sein, dass bei der fehlenden Default.aspx das DirectoryListing angezeigt wird

14.02.2012 - 08:10 Uhr

Hallo,
bei solchen Fällen könnte ein virtuelle Maschine hilfreich sein, um zu testen, wie sich deine Programme auf anderen OS oder auf einem ganz frisch installiertem System verhalten.

10.02.2012 - 13:57 Uhr

Hallo,
danke für die Erklärung. Aktuell löse ich das tatsächlich einfach über RenderTransform und 0.
Expander gucke ich mir mal an und weiß nun zumindest Bescheid, dass es so nicht geht.

Danke

10.02.2012 - 10:29 Uhr

Hi Seikilos,

Hier gehts mir um die Frage, ob es generell möglich ist, ein Property Binding als StaticResource zu benutzen

Die Frage wurde ja bereits beantwortet.

Konkret gehts mir um die Position eines Objekts, welches ich noch hin und her schiebe, das wird ziemlich mühselig über eine Resource zu regeln

Das ist dagegen noch etwas erklärungsbedürftig. Also was möchtest du erreichen, was hast du probiert, und was funktioniert noch nicht?

Christian

Hallo,

wo genau wurde die Frage beantwortet? Ich sehe die Antwort nicht.

Der Kontext ist: Ich habe ein Panel, welches ich über ein Storyboard auf Befehl in eine Richtung bewegen möchte.
Nun möchte ich auf einen anderen Befehl das Panel wieder auf die Originalposition bewegen.
Da ich keinen gescheiten Weg gefunden habe, wie ich ein Storyboard gesteuert rückwärts abspielen lassen kann, habe ich mir ein zweites Storyboard angelegt.

So ungefähr:

<Storyboard x:Key="Forward" DecelerationRatio="0.5" AccelerationRatio="0.5">
    		<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="wrapPanelHome">
    			<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="-820"/>
    		</DoubleAnimationUsingKeyFrames>
    		
    	</Storyboard>

        <Storyboard x:Key="Backward" DecelerationRatio="0.5" AccelerationRatio="0.5">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)" Storyboard.TargetName="wrapPanelHome">
                <SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="[WERT?]"/>
            </DoubleAnimationUsingKeyFrames>
        
        </Storyboard>

Das Problem ist, welchen Value soll mein Storyboard Backward bekommen?
Ich schiebe das Panel noch hin und her und kenne den Endwert noch gar nicht. Da ich es hier jedoch nicht manuell eintragen möchte um möglichst konsistent zu sein, wollte ich den Value als StaticResource anlegen. So dass beim Application Start EINMAL die aktuelle X Position des Targets gelesen wird.
Bei einem Binding würde der Wert nach dem Ablauf der erst Animation bei der Backward Animation nun nicht mehr auf den Ursprung zeigen

10.02.2012 - 08:50 Uhr

Hallo,

Background ist nur ein Beispiel. Konkret gehts mir um die Position eines Objekts, welches ich noch hin und her schiebe, das wird ziemlich mühselig über eine Resource zu regeln

10.02.2012 - 08:31 Uhr

Hallo,

ich habe zwei Buttons

	<Button Content="Button 1" Background="{Binding Background, ElementName=button2}" HorizontalAlignment="Left" Height="66" Margin="54,70,0,0" VerticalAlignment="Top" Width="106"/>
		<Button Content="Button 2" Name="button2" Height="66" Margin="274,70,240,0" VerticalAlignment="Top" Background="#FF938888"/>

Der erste Button hat ein Binding auf den Background des anderen.
Wenn ich zur Laufzeit den Background des zweiten Buttons ändere, so ändert sich auch der BG des ersten.

Gibt es einen Weg, wie ich jedoch das Binding als StaticResource benutze?
Der Sinn: Ich weiß den Background für den button2 noch nicht final und möchte daran rumspielen. Wenn ich die Anwendung starte, soll diese Farbe einmal (also quasi als StaticResource) vom Property des button2 gelesen werden. Das bekomme ich jedoch nicht hin.

P.S: Ich will den Background nicht für beide als Resource in Window.Resources anlegen. Hier gehts mir um die Frage, ob es generell möglich ist, ein Property Binding als StaticResource zu benutzen

Danke

09.02.2012 - 07:43 Uhr

Hallo,
danke für die Tipps.
Ich habe mal Snoop ausprobiert. Bis zum Button komme ich, aber kann man hier sehen, was bei MouseOver passiert?

08.02.2012 - 14:53 Uhr

Hallo,

mein Problem: WPF Button hat eine MouseOver Animation, die nicht in mein Look&Feel passt.
Ich würde nun jedoch sehr ungerne ein eigenes Button Control Template bauen, in dem ich dutzende von Properties manuell auf TemplateBinding setzen muss, nur um auf die Animation für MouseOver zu kommen.

Jetzt habe ich mir überlegt, ob MouseOver eventuell zu einer Farbe hin animiert, die unter SystemColors definiert ist. So könnte ich mit einem Style diese überschreiben.

Ich finde nur die richtige Farbe nicht. Genau genommen weiß ich noch nicht mal, ob ich auf dem richtigen Weg bin. Daher würde ich gerne das Markup des Buttons sehen, um zu verstehen, wie dieser aufgebaut ist.

Über ILSpy kann ich mir zwar PresentationFramework.dll angucken und dort finde ich auch den Button, aber ich sehe nicht genug und frage mich, ob das Markup oder das Erzeugen der DependencyProperties mit konkreten Werten wo anders ist und ob ich da dran komme

Danke

08.02.2012 - 09:19 Uhr

Hallo,

ich habe eine Klasse Foo, welche serialisiert werden kann, diese hat ein Property Controller vom Typ ControllerMaster, so ungefähr:


[Serializable]
class Foo
{
  public ControllerMaster Controller  { get; set; }
}

Die Referenz auf das Property ist komplex und aufwendig zu serialisieren. Ich kann jedoch den Controller sehr leicht in eine String-Representation umwandeln (kein ToString()) und beim Deserialsieren den String wieder in das Objekt wandeln.

Gibt es ein Attribut oder ähnliches, was bei der Serialisierung und Deserialisierung eine Methode aufruft, die bei der Serialisierung einen String und bei der Deserialisierung ein Objekt vom Typ ControllerMaster zurück gibt?

Ich würde nach Möglichkeit ungern ein verstecktes Property mit der String-Represenation vorhalten müssen, was anstelle des eigentlichen Properties serialisiert wird.

30.01.2012 - 16:13 Uhr

Habe die Lösung.

Mein TemplateColumn, was variabel sein soll, hat jetzt doch einen TemplateSelector bekommen

 <wpft:DataGridTemplateColumn CellTemplateSelector="{StaticResource ModifierSelector}" Header="Modifier" />

In Resources:

 <DataTemplate x:Key="NoModifierTemplate">
            <Label Content="No Modifier" FontStyle="Italic" />
        </DataTemplate>
        
        <InterfaceSimulator:PropertyDataTemplateSelector x:Key="ModifierSelector" NoModifierTemplate="{StaticResource NoModifierTemplate}" />

Mein DataBinding hat eine zusätzliche Spalte bekommen, die angibt, welcher Modifier nun gerade aktiv ist. Ich habe also das DataBinding erweitert.

Die PropertyDataTemplateSelector Klasse:

 public class PropertyDataTemplateSelector : DataTemplateSelector
   {
      public DataTemplate NoModifierTemplate { get; set; }
     
      public override DataTemplate SelectTemplate(object item,
                 DependencyObject container)
      {
         var i = item as MyType;
         if (i == null)
         {
            return base.SelectTemplate(item, container);
         }

         if (i.Modifier == null)
         {
            return NoModifierTemplate;
         }

         return i.Modifier.RenderDataTemplate();

      }
   }
 

Der Modifier return eine, wie auch immer gerartete DataTemplate Instanz mit eigenen Callbacks, usw.

30.01.2012 - 14:46 Uhr

Hallo,
danke für den Hinweis. Ich meine tatsächlich DG von WPF und nicht das alte WinForms Ding 😄

Etwas zum Hintergrund: Jede Zeile stellt eine Variable dar, auf der gearbeitet wird.
Es kann jetzt sein, dass eine Variable durch einen Slider oder durch einen Button bedient werden soll.
Welches Bedienelement es sein soll, wird vom Benutzer festgelegt.

Sprich das DG wird aufgebaut mit den Variablen und die eine Template Spalte mit den Controls ist leer.
Der User wählt für eine Variable nun Typ "Button" und der Button soll dann in der jeweiligen Spalte auftauchen.
Ich würde die Templates ungerne in XAML definieren, weil diese Controls über Plugins reingeladen werden sollen.
Es gibt dann irgendwo eine BoolControl.GenerateDataTemplate(), welches mir ein Template zurück gibt.

Womit ich auch nach der Lektüre des Links habe, ist das manuelle selektieren.

Ich habe 3 Spalten und ein Data-Binding auf die ersten zwei. An den CellContent komme ich nun zwar, wie oben erwähnt dran, aber mir fehlt das letzte bisschen, um im Code für eine beliebige Zeile das DataTemplate auszutauschen.

30.01.2012 - 13:26 Uhr

Hallo,

ich hab ein DGV welches Zeilen hat, deren letzte Spalte ein Template ist. Default DataTemplate ist ein Label, was quasi als Platzhalter dient.
Nun möchte ich für eine bestimmte Reihe das Template austauschen (z.B. Button)

Ist dies möglich? Die Idee ist, dass jede Reihe gemäß einem Kontext entweder in der Template Spalte als Button, Image, usw repräsentiert wird.

Über dgv.Columns[n].GetCellContent bekomme ich zwar das FrameworkElement, aber ich glaube, ich bin viel zu tief drin. Ich kann bei diesem Element nicht mehr das CellTemplate ändern.

Ich bin mir relativ sicher, dass hier meine alten Konzepte von WinForms Probleme bereiten.
Es geht mir hier nicht um einen TemplateSelector. Sprich das Template soll generisch erzeugt werden und nicht bereits in XAML vordefiniert werden.

21.01.2012 - 15:59 Uhr

Danke für die Links,
Ich denke mit Canvas geht es in der Tat am Direktesten.

Danke 😃

21.01.2012 - 13:28 Uhr

Hallo,

ich bin relativ neu bei WPF und bin mir nicht ganz sicher, wie man folgendes Problem lösen kann:

Ich hab ein Window mit einem StackPanel mit einem Button.
Wenn ich diesen Button drücke, starte ich eine ThicknessAnimation bei der ich das StackPanel nach links über Margins raus bewege. Das klappt recht gut.
Nun würde ich jedoch gerne noch ein StackPanel von rechts nach links rein animieren.
Was ich hier nicht vernünftig geregelt bekomme, ist wie ich das zweite StackPanel angezeigt bekomme. Da das erste Panel am Window hängt, erzeugt ein this.AddChild eine Exception, weil bereits ein Element hinzugefügt worden ist.

Wie würde man das am Besten machen? Gibt es eine bessere Lösung als StackPanels?

13.01.2012 - 14:57 Uhr

Um zu prüfen ob es geht, könntest du eine Spike-Solution anlegen und die Operationen auf Dummy-Daten ausführen, die du für die Produktivlösung lokalisiert hast.
Dann kannst du sehen, ob die Arbeit mit den Operationen und der Größe problematisch ist.