Laden...

Forenbeiträge von PottKafe Ingesamt 19 Beiträge

22.12.2016 - 13:49 Uhr

BitmapCacheOption Enumeration

Auf englisch versteht man es ein wenig besser.
None
Do not create a memory store. All requests for the image are filled directly by the image file.

Bereitgestellt wird die Bitmap durch die klasse 'BitmapDownload'

Hier wird der Stream geöffnet doch nie geschlossen. Ob von anderer stelle irgendwann der Stream geschlossen wird konnte ich nicht erkennen.

22.12.2016 - 12:36 Uhr

Wenn ich das richtig verstanden habe, wird bei deaktiviertem Cache & URI der Stream offen gelassen.
Bei Aktivierten Cache wird die Datei in den Arbeitsspeicher geladen & der Stream wieder geschlossen, hierbei gibt es die Optionen 'OnDemand & OnLoad' deren namen für sich selbst sprechen.

19.12.2016 - 08:56 Uhr

Wenns ein speicher Problem ist kann es gut sein das du die WPF Bindings nicht richtig implementiert hast.
Für jede klasse auf die gebunden wird, die dennoch nicht 'INotifyPropertyChanged' implementiert wird per Reflection ein PropertyBinding erzeugt welches du nie aus dem Arbeitsspeicher bekommst.
Schau mal nach ob du das 'INotifyPropertyChanged' irgendwo vergessen hast.

Um nachzuschauen Wo & Ob du ein speicher Problem hast kannst du die DiagnosticTools vom Visual Studio verwenden oder Manuell eine Weakreference in einer Liste ablegen & nach einer zeit schauen ob bei den WeakReference's noch IsAlive auf true steht.

18.11.2016 - 14:08 Uhr

Events solltest du mit MVVM auch vermeiden :

Du kannst den Trigger im Style der Checkbox setzen

 
 <Style.Triggers>
          <Trigger Property="IsChecked" Value="True" >
                 ...      
         </Trigger>
</Style.Triggers>

oder im DataTemplet

 
<DataTemplate.Triggers>
    <DataTrigger Binding="{Binding IsSelected}" Value="True">
                                                ...
     </DataTrigger>
</DataTemplate.Triggers>

Du könntest in Deinem ViewModel auch auf das PropertyChanged Event der Eigenschaft: 'IsSelected' warten.


...ctor()
this.PropertyChanged += VM_PropertyChanged
...

        private void VM_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
                case nameof(IsSelected):
                    RaiseSelectedChanged();
                    break;

                default:
                    break;
            }
        }


10.11.2016 - 12:11 Uhr

Hi _Cashisclay,

Vielleicht hat der Anwender die rechte auf den Pfad zuzugreifen nicht.

Wenn etwas mit dem Pfad nicht stimmt könnte der Microsoft Artikel zum Thema Microsoft Pfade helfen.

10.11.2016 - 10:52 Uhr

Hi PoWl,

Das mit dem Fokus ist immer so eine Sache.

Vielleicht kannst du über den FocusManager was machen.

Als Workaround würde ich eine AttachedProperty anlegen die den Fokus immer wieder entfernt sobald dieser gesetzt ist.

28.10.2016 - 08:45 Uhr

Wenn es dir nicht um die Genauigkeit geht, nimm doch einfach die werte
MIN: -1d
MAX: 1d

Und Multipliziere einfach Double.MaxValue mit dem eingestellten wert

07.10.2016 - 11:24 Uhr

Ich will ja nicht direkt die Version sondern erstmal die GUID zum identifizieren

07.10.2016 - 11:11 Uhr

Wenn ich die Dateien nur lese Blockiert nichts,
Assembly.Load blockiert hier wohl den Hauptthread

07.10.2016 - 08:10 Uhr

Ich will ja nichts aktualisieren, sondern bloß Asseblys laden.

Ich schaue in regelmäßigen Abständen ob eine bestimmte Assembly aktualisiert wurde, nur friert jedes mal friert die UI kurz ein obwohl der Thread erstmal nichts mit der UI zutun hat.

Das ganze läuft unter .Net 4.0

06.10.2016 - 16:55 Uhr

Hallo zusammen, Ich habe folgendes Problem:
wenn ich


 new Thread(new ThreadStart(tstest)).Start();

starte blockiert meine UI 🙁

Hat einer eine Idee wie ich das im Hintergrund laufen lassen kann?

 
void tstest()
{
foreach(var item in GetAsembys("ordner mit vielen *.exe dateien"))
{
}
}

    public class AssemblyHolder
    {

        #region Fields

        public Assembly originAssembly;

        public String originPath;

        private FileVersionInfo m_FileVersion;

        private Version m_AssemblyVersion;

        #endregion Fields

        #region Properties

        public FileVersionInfo FileVersion { get { return m_FileVersion = m_FileVersion ?? GetFileVersion(); } set { m_FileVersion = value; } }
        public Version AssemblyVersion { get { return m_AssemblyVersion = m_AssemblyVersion ?? GetAssemblyVersion(); } set { m_AssemblyVersion = value; } }

        #endregion Properties

        #region Constructors

        public AssemblyHolder(Assembly _asm, String _originPath)
        {
            originAssembly = _asm;
            originPath = _originPath;
        }

        #endregion Constructors

        #region Methods

        public static implicit operator Assembly(AssemblyHolder d)
        {
            return d.originAssembly;
        }

        public FileVersionInfo GetFileVersion()
        {
            return FileVersionInfo.GetVersionInfo(originPath);
        }

        private Version GetAssemblyVersion()
        {
            return originAssembly.GetName().Version;
        }

        #endregion Methods
    }

   public static List<AssemblyHolder> GetAsembys(String _rootfolder, SearchOption _option = SearchOption.AllDirectories)
        {
            try
            {
                List<AssemblyHolder> asm = new List<AssemblyHolder>();
                var executables = Directory.GetFiles(_rootfolder, "*.exe", _option);

                foreach (var item in executables)
                    try
                    {
                        using (Stream stream = File.OpenRead(item))
                        {
                            byte[] rawAssembly = new byte[stream.Length];
                            stream.Read(rawAssembly, 0, (int)stream.Length);
                            asm.Add(new AssemblyHolder(Assembly.Load(rawAssembly), item));
                        }
                    }
                    catch { }

                return asm;
            }
            catch { return default(List<AssemblyHolder>); }
        }

21.09.2016 - 12:19 Uhr

Versuch mal den Path auf '.' zu setzten oder erstell dir ein Converter in dem nix passiert außer ein Debug.Break(); und schau nach was als Value reinkommt 😃

13.09.2016 - 15:35 Uhr

@abt

genau, eine (Business) Rule Engine 👍 . Das suche ich.

13.09.2016 - 14:48 Uhr

Ich habe kein direktes Problem sondern suche nach einer Möglichkeit/Anregungen komplexe Prüfungen umzusetzen.

Als Möglichkeit kommen mir nur:

  • Die Verwendung von vordefinierten Methoden.
  • Das definieren von komplexe Prüfungen über ein Script.
    *Die Scripte würden über normale Und/Oder Operationen miteinander verknüpft.
    in den sinn.
13.09.2016 - 14:32 Uhr

@inflames2k
Es geht mir nicht um die Speicherung/anzeige/Bearbeitung das kommt alles später.
Im Moment grüble ich immer noch über den Grundaufbau der Komplexen Ergebnisfindung.

Simple Prüfungen mit (Und,Oder,Nicht,kleiner,Größer, ungleich,gleich) hab ich schon zuhauf im Programm, da müsste ich nur ein neues Modul anmelden.

Mit komplex meine ich zugleich flexibel, ich will nicht bei einer neuen art Prüfung das komplette Programm neu Compilieren müssen. Mit einem Modul das bei Prüfung compiliert kann ich mich noch anfreunden, möchte ich aber nicht wirklich in meinem Programm haben.

13.09.2016 - 12:34 Uhr

Die Daten sind alle da. Es geht nur um die reine Konfiguration.

Selbst wenn ich das in DLL's auslagere muss ich diese bei jeder Änderung auf den Client PC's aktualisieren.

Die OAN(Or,Not,And) Konfiguration stellt kein Problem dar.
Die Definition von komplexen Kriterien für die Ermittlung der anzuwendenden Matrix ist die Schwierigkeit.

Ich würde das gerne richtig machen. da ich genau die selbe Funktionalität für andere Programm abschnitte verwenden würde.

Ich habe auch schon über Workflow's nachgedacht aber damit kann ich mich nicht anfreunden.

13.09.2016 - 11:51 Uhr

Es handelt sich nicht um die Preisfindung an sich sondern um die Auswahl der Matrix.

Im Moment haben wir 4 verschiedene Matrix typen.
Jede Matrix hat nochmal verschiedene Werte/Zuschläge/Abzüge/Rabatte/etc.

Über den User soll nur Konfiguriert werden können wann welche Matrix verwendet wird.

Wenn nur an (4648) geliefert wird, Matrix X
Wenn nur an (5594) geliefert wird, Matrix Y
Wenn an (5594 & 4648) geliefert wird, Martix mit 10%Rabatt bei mind. 20 positionen
Wenn sich im Empfängerkreis aus kunden mit den Postleitzahlen (5594,4648,4489)
zusammensetzt Matrix Z.
usw.

13.09.2016 - 10:27 Uhr

Hallo zusammen,

Bevor ich loslege würde ich mir gern ein paar Anregungen, Ideen zu dem Thema anhören.

Ziel ist es *(im besten Fall) dem Anwender eine Oberfläche zur Verfügung zu stellen über die Kriterien für eine Matrix Auswahl festgelegt werden können.

Bei den Kriterien handelt es sich nicht nur um simple (und,oder,nicht) Endscheidungen sondern auch um komplexe Kriterien.

Es werden immer mehr Entscheidungskriterien hinzukommen da jeder kunde gerne seine Extrawurst hätte.

Mein Hauptanliegen ist es nicht ständig an den Quellcode ran zu müssen weil es eine Änderung der Bedingungen gab oder welche hinzugekommen sind.

Mein erster Gedanke war es für komplexe Kriterien Scripte einzubinden über die dann die passende Matrix ausgewählt werden kann.

10.08.2016 - 09:23 Uhr

Hallo zusammen,

wozu ist der 'DisplayMemberPath' des DataGrid gut?

*einfach nur so aus Interesse