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 Tarion
Thema: Cacheing Lösung für eine .net 3.5/mono 2.6.7 anwendung
Am im Forum: Datentechnologien

Hi,
ich bin dabei ein Repository Pattern für den Datenzugriff zu implementieren und suche nach einer guten Lösung für das Caching der Daten im Speicher. Ich will dabei ungern das Rad neu erfinden und meinen eigenen Cache implementieren ...

Wozu ratet ihr?

Thema: SOA Design, Provider hängen von anderen Providern ab
Am im Forum: Rund um die Programmierung

FZelle, nach deiner Erklärung kann ich das ganze dann so beschreiben:
Ich habe einen TimeService und einen PlayerStateProvider sowie einen PlayerStateService. Nun hängt der PlayerStateProvider vom TimeService ab.

Dann ist die Frage: Ist es sinnvoll, dass ein Provider von einem Service abhängt? Oder sollte diese Abhängigkeit von einem Service gekapselt werden?

Warum die Unterscheidung zwischen PlayerStateService und PlayerStateProvider?
Weil der PlayerStateService Konsumerorientiert und Stateless ist, im Gegensatz zum PlayerStateProvider

Ich sehe aktuell auch keine Probleme in meinem Design, ich interessiere mich nur für Konzepte und Good Practice.

Thema: SOA Design, Provider hängen von anderen Providern ab
Am im Forum: Rund um die Programmierung

Den Äußeren Server will ich halt vermeiden, da der Provider darauf angewiesen ist, dass er regelmäßig den Zustand prüft. Dieses Wissen sollte ein Service, der den Provider nutzt nicht haben.

Die Provider hängen alle über Interfaces zusammen. Aktuell ist alles überschaubar und ich verbinde es direkt im Code ohne extra DI Container. Aber das lässt sich bei bedarf nachrüsten.

Thema: SOA Design, Provider hängen von anderen Providern ab
Am im Forum: Rund um die Programmierung

Ich hab schon einiges über SOA gehört und gelernt, das meiste bezieht sich auf Services. Jetzt habe ich mehrere Provider die von anderen Providern abhängen.

Beispiel:
Ein TimeProvider gibt die aktuelle Zeit
Ein PlayerStateProvider nutzt intern jede Sekunde den TimeProvider, um festzuhalten, wann sich der Zustand des Spielers geändert hat.

Aktuell hängt der PlayerStateProvider (und andere Provider) direkt vom TimeProvider ab.

Ist das nun schlechtes Design? Und warum?

Wenn ich dass in einem Service implementieren würde, müsse der Service:
Von PlayerStateProvider und TimeProvider abhängen und den PlayerStateProvider regelmäßig aktiv nach dem Zustand des Spielers fragen. Denn wird der PlayerStateProvider mal nicht gefragt, bekommt er die Zeit, wann sich der Zustand geändert hat nicht mit.

Wie designe ich das ganze am besten Serviceorientiert?

Thema: updateSystem.NET
Am im Forum: Projekte

Ich verwende den Updater immer gerne, ich weiß nicht wie es Zeitlich klappt - Grundsätzlich hätte ich aber schon Interesse Erweiterungen dafür zu schreiben.

Thema: Arx-Obscura: C#-basiertes Rollenspielprojekt sucht Techniker und Programmierer
Am im Forum: Projekte

Wir sind mit dem Projekt sehr weit voran gekommen. Der Bau hat die nötigen Landschaften und Gebäude für den Livebetrieb fertig gestellt, die Fangemeinde ist seit der ersten Anfrage hier stetig gewachsen.
Es gibt ein Liveserver auf dem Bereits Betatests mit Spielern durchgeführt wurden und bis Spielstart weitere Tests folgen.

Man kann sagen, wir befinden uns in den letzten Zügen vor Spielbeginn. Wir such dennoch weiterhin fähige Programmierer, die sich für unser Projekt begeistern lassen.

Wenn ihr also Interesse oder Fragen habt meldet euch gerne bei mir.

Gruß, Tarion

Thema: RS232: Wird DataRecieved (zuverlässig) gefeuert, wenn das Gerät alle Daten gesendet hat?
Am im Forum: Rund um die Programmierung

Ich habe selbst wenig Erfahrungen, vor Kurzem habe ich aber von einem Kollegen der sich tiefgehender mit dem Thema beschäftigt hat das für spezielle Anwendungen das Event nicht mehr ausreicht. Aber angeblich sind ihm durch die Events in bestimmten fällen daten verloren gegangen oder in der falschen Reihenfolge angekommen. Das hängt aber auch von der Peripherie ab, wie USB/Seriell Wandler, etc. und ist kein reines C# Problem gewesen.

Thema: RS232: Wird DataRecieved (zuverlässig) gefeuert, wenn das Gerät alle Daten gesendet hat?
Am im Forum: Rund um die Programmierung

Es gibt 2 Bedingungen damit das Event gefeuert wird.

1) eine konfigurierte Anzahl Bytes wurde empfangen
2) es sind Daten vorhanden und eine konfigurierte Zeit ist vergangen

Diese beiden Werte können in der SerialPort Klasse eingestellt werden. Paramternamen habe ich nicht im Kopf.

In Zeitkritischen Anwendungen und in Multithreadanwendungen kann dieses Verhalten durchaus Probleme verursachen. In den meisten Anwendungen wird es aber ausreichen.

Der sicherste Weg wäre ein eigener Thread der auf neue Daten pollt. Dann hat man alles was ankommt und in welchen Threads es verarbeitet wird selbst in der Hand.

Thema: Delegate für "allgemeinen Filter": eigenen Delegatentyp definieren oder Func<...> verwenden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von winSharp93
Das stimmt so nicht: Wenn der Member, der den Delegate "erwartet" public ist, muss auch der Delegat öffentlich zugänglich sein.
Und wenn der Member z.B. internal ist, macht die Sichtbarkeit des Delegaten keinerlei Unterschied.

Hm ja, ich dachte an so etwas wie unten gezeigt. Aber da macht es dann tatsächlich keinen Unterschied ob das Delegate internal ist oder nicht.


    internal delegate void FilterFunc();
    public class ImplementingFilter
    {
        private FilterFunc m_MyFilter;
        internal FilterFunc MyFilter
        {
            get { return m_MyFilter; }
            set { m_MyFilter = value; }
        }


        public ImplementingFilter()
        {
        }

        public void FilterSomething()
        {
            m_MyFilter.Invoke();
        }
    }

Thema: [gelöst] Klassen / Strukturen dynamisch erstellen
Am im Forum: Rund um die Programmierung

Du hast für deine Definitionen zwei Möglichkeiten:
(1) Zur Laufzeit Interpretieren oder (2) in C# Code umwandeln. Mir fallen grad nicht mehr ein.

(1) Du kannst dir die Struktur der erwarteten Daten anlegen und dem Message Reader zur Verfügung stellen. Die Definition dient dann quasi als Konfiguration für den Parser der die Daten strukturiert ablegt. Die geparsten Daten können z.B. in Dynamics abgelegt werden. Dies kostet allerdings etwas Typsicherheit.

(2) Ist im Prinzip dein Vorschlag. Du kannst per CodeDOM Code erzeugen, Compilieren, Einbinden und per Reflection drauf zugreifen. Hier bist du Typsicher.

Was nun mehr Arbeit macht ist die Frage. Ich denke ich würde einen unabhängigen Codegenerator für (2) bauen und die Klassen dann statisch einbinden und im Programm nutzen.

(3) Du kannst natürlich die gegebenen Definitionen auch per Hand in Code übersetzten.

Schau dir mal WCF an, die definieren auch Protokolle und erzeugen auf Basis der Metainformationen die Datenstrukturen - in dem Fall Interfaces.


Gruß.

Thema: Threads: Liste der Reihe nach abarbeiten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Der Punkt ist, dass

this.Invoke(new MethodInvoker(downloadWorker));
die downloadWorker() mehtode im GUI Thread ausführt. Das ist genau der Sinn von Invoke von WinForms.
Schau dir auch mal den "BackgroundWorker" an der für solche Fälle gut geeignet ist.

Thema: Delegate für "allgemeinen Filter": eigenen Delegatentyp definieren oder Func<...> verwenden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

In deinem Fall spricht nichts gegen Func<T>.

Gründe für ein Eigenes Deletagte könnten die Typsicherheit oder der Zugriffslevel sein. Wenn du z.B. irgendwo ein "Filterdelegate" erwartest kann dir das jeder Liefern der Zugriff auf das Delegate hat. Im Fall von Func<T> also jeder. Hast du ein eigenes delegate was möglichweise sogar internal ist, kannst du sicher sein, dass nur autorisierte Klassen dir das Delegate übergeben.

Thema: Verifizierung einer RS232 Implementierung in C#
Am im Forum: Rund um die Programmierung

R232 ist kein Protokoll sondern eine Schnittstelle. Wenn du willst, kannst du sogar das TCP/IP Protokoll für RS232 implementieren (wohl nicht sehr sinnvoll).

Wir haben ein eigens entwickeltes Protokoll welches bereits implementiert ist und nun im rahmen einer neuen Softwareversion erneut implementiert wird. Ich beschäftige mich anhand dieses Beispiels mit dem Thema der Verifikation von Modell & Software.

@herbivore: Danke, das sind schöne Realitätsnahe antworten.
Man wird wohl immer davon ausgehen müssen, dass das eigene Modell korrekt ist. Wenn das Modell nicht zu groß ist, ist es zumindest überschaubarer als Quellcode. Das Framework wird man wohl auch als korrekt annehmen müssen.

Thema: Verifizierung einer RS232 Implementierung in C#
Am im Forum: Rund um die Programmierung

Ich bin nach einiger Zeit mal wieder hier im Forum gelandet. Ich beschäftige mich aktuell mit der Verifizierung und Verifizierten Implementierung eines Protokolls.

Ich habe mich die letzte Woche intensiv damit beschäftigt wie man Software und Protokolle Spezifiziert, Verifiziert, Testet und Simuliert. Ziel des Threads soll es sein weitere Ideen und Anregungen zu dem Thema zu sammeln und meine Gedanken ein wenig zu ordnen. Da das Thema sehr weit gestreut ist, möchte ich meine bisherigen Ergebnisse ein wenig zusammenfassen:

Modelierung
Es gibt viele Tools die basierend auf verschiedenen Logiken wie LTL, CTL, CTL* mit denen sich Automaten und Systeme mit Modellen auf bestimmte Eigenschaften testen lassen können.
Ich habe das Protokoll bis zu einem bestimmten Abstraktionslevel bereits mit dem Tool Uppaal modelliert. Ich bin sicher, dieses Modell lässt sich noch erweitern und auch mit anderen Modelcheckern auf weitere Eigenschaften prüfen. Uppaal ist nicht optimal weil es eher auf Zeitkritische Anwendungen ausgelegt ist, was mein Protokoll nur bedingt ist (Nur Timeouts). Das größte Problem ist dabei eher ein korrektes Modell zu erstellen und zu wissen auf welche Eigenschaften es ankommt.
An Tools habe ich mir bisher näher angesehen: Alloy (Analyze Structures), Uppaal (timed automata), Spin (LTL), Enterprise Architect (Simulation), und es gibt noch viele mehr die ich nur kurz angesehen habe.

Verifizierung
Zwei Dinge müssen Verifiziert werden: Das Protokoll und die Implementierung.
Mit Code Contracts, Pex und automatischer Testgenerierung kommt man ja schon sehr weit. Dennoch handelt es sich um Testen und nicht um verifizieren. Hier ist die Frage, wie weit kann man überhaupt gehen? Wo sind die Grenze?
Man kann Runtime verfication über die Contracts machen und mit generierten Testcases eine Hohe Codecoverrage erreichen. Wie weit ist solch ein Vorgehen von formalen Verifikationen noch entfernt?

Welche Erfahrungen habt ihr in der Praxis gemacht?

Ausblick
Interessant wären Techniken um Modelle aus dem C# Code zu bekommen. Vielleicht kann man auch ein Modell der Spezifikation bauen und mit der Ausführung der Implementierung synchronisieren. Dann könnte man auf dem Modell Verifikationen durchführen und über die Laufzeitsynchronisation feststellen wie nahe das Modell an der Implementierung ist oder ob Zustände/Übergänge fehlen.


Über das Protokoll an sich kann ich hier aus verschiedenen Gründen nichts sagen. Es gibt natürlich auch einige Konkrete Probleme im Protokoll die ich angehen werden. Ich suche aktuell aber noch auf einer allgemeineren Ebene nach Lösungen und Problemen zum Thema "Verifikation".

Thema: XmlSerializer: Property of type Type
Am im Forum: Datentechnologien

Ich hab mir jetzt ne eigene serialisierbare Klasse gemacht die ich nutze:


using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace Server.ArxObscura.Engine.Scriptengine.Types
{
	public class TypeInformation
	{
        private string m_TypeName;
        private Type m_Type;

        public string TypeName
        {
            get
            {
                return m_TypeName;
            }
            set
            {
                m_TypeName = value;
                m_Type = null; // Will search for the type on next TypeInformation.Type._get()
            }
        }

        [XmlIgnore]
        public Type Type
        {
            get {
                if (m_Type == null && !String.IsNullOrEmpty(TypeName))
                {
                    m_Type = Server.ScriptCompiler.FindTypeByName(TypeName, false);
                }
                return m_Type; 
             }
            set
            {
                m_Type = value;
                if (value != null)
                {
                    m_TypeName = value.FullName;
                }
            }
        }

		public Boolean Compiled
		{
			get
			{
				if (Type != null) return true;
				return false;
			}
		}

        /// <summary>
        /// For XmlSerialization
        /// </summary>
        public TypeInformation()
        {
        }

		public TypeInformation(string typeName)
		{
			TypeName = typeName;
		}

		public TypeInformation(Type type)
		{
			Type = type;
		}
	}

}

Thema: XmlSerializer: Property of type Type
Am im Forum: Datentechnologien

Ich verwende den XmlSerializer. Ich habe ein Objekt mit einer Property vom type Type. Hier bekomme ich eine Exception ich soll XmlInclude oder SoapInclude verwenden.

Die beiden Attribute wollen aber den Type haben und das kommt für mich nicht in Frage. Muss ich jetzt nen Workarround gehen und meine Type Poperties als Strings abspeichern und beim Laden wieder in Types konvertieren oder gibt es da doch eine elegante Möglichkeit?

Thema: updateSystem.NET
Am im Forum: Projekte

Zitat von masterchris_99
Hi,
P.S. Was ist wenn ich jedes Update als ServicePack markiere? Lädt er die Daten dann wieder inkrementell?
mfg Chris

Dann wird nur das jeweils neuste Update geladen. Wenn dort Dateien fehlen, die in alten Updates vorhanden waren, werden diese auch nicht installiert.

P.s. ist Laufwerk X ein Netzwerk Laufwerk?

Thema: Software Uhr die nicht die Systemzeit ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Stimmt, wäre ne 3. Alternative :) War auch nur aus Interesse.

Thema: Software Uhr die nicht die Systemzeit ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Blacal
Hallo Tarion,

aufpassen, ich selbst bin bei diesem Environment.TickCount schon einmal in die Falle getappt. Läuft deine Anwendung nämlich länger als 24,9 Tage durch, so fängt der Wert von TickCount wieder auf Int32.MinValue gesetzt.

Hier geht es um die System Up Time und nicht die Laufzeit des Programms. Aber den Überlauf bekommt man nicht so einfach mit oder?

Könnte natürlich bei jeder Abfrage des Datums eine If-abfrage machen und den abgefragten Wert speichern.

Thema: Software Uhr die nicht die Systemzeit ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zur Genauigkeit kann man nicht viel sagen oder? Denke mal die Systemzeit basiert am Ende auch auf dem TickCount.

Mir geht es vor allem darum, dass ich meine Software aktuell als Admin starten muss um die Systemzeit mit einem Zeitserver synchronisieren kann. Da würde schon die Offsetlösung reichen. Es wird ohnehin in regelmäßigen Intervallen neu Synchronisiert.

Dann läuft die auch bei Benutzern die z.B. in der Firma keine Adminrechte haben.

Thema: Software Uhr die nicht die Systemzeit ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

TickCount klingt super. Danke.

Thema: Software Uhr die nicht die Systemzeit ist
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,
DateTime.Now ist immer die aktuelle Systemzeit. Gibt es eine Möglichkeit eine Uhr zu nutzen die von der Systemzeit unabhängig ist?
Grund wäre, dass die Systemzeit nur mit Adminrechten verändert werden kann.

Natürlich kann man nur den Offset speichern und dann immer die gewünschte Zeit berechnen. Dann ist man aber weiterhin abhängig von der Systemzeit.

Gruß, Tarion

Thema: [Tutorial] Konfigurationsmodell im .NET Framework
Am im Forum: Artikel

Es gibt 2 Versionsnummern:

Zitat
[assembly: AssemblyVersion("1.4.4.0")] // Änderung führt zu neuem Verzeichnis für die COnfig
[assembly: AssemblyFileVersion("1.6.0.0")] // Dateiversion der Assembly. Änderung hat keinen Einfluss auf die Config

Mich interessiert wie man an den Pfad der Config ran kommt.

Thema: Event in MainForm bei Klick im UserControl
Am im Forum: GUI: Windows-Forms

Zitat von herbivore
greife nie aus dem MainForm auf die Internas eines UserControls zu. Definiere ein eigenes Event im UserControl und abonniere das im MainForm.

Ein anderer Ansatz wäre, das Usercontrol Werte in einer anderen Klasse verändern zu lassen die INotifyPropertyChanged implementiert. Dann kann sich die MainForm direkt als Databinding an diese Klasse hängen.

Thema: Mehrere Forms in mehreren Threads
Am im Forum: GUI: Windows-Forms

Ich habe mein Problem jetzt gelöst. Beim Formatieren der Zellen wurde eine Liste mit mehreren Tausend Einträgen durchsucht. Das Ergebnis kann problemlos gecached werden.

Aber gut zu wissen, dass es theoretisch funktioniert. Ich glaube nicht, das die Limitierung der Threadwechsel zu Verzögerungen von >50ms Sekunden führen würde.

Mir fallen auch nicht viele Gründe ein, aber eine Uhr die möglichst genau laufen soll wäre schon nen guter Grund.

Thema: Mehrere Forms in mehreren Threads
Am im Forum: GUI: Windows-Forms

Ich färbe in CellFormatting und hab da gerade noch Code gefunden der tatsächlich langsam sein könnte.

Die Daten aktualisieren das Form nicht, weil es sich um eine berechnete Property handelt die von der Zeit abhängt und daher kein OnPropertychange wirft.

Thema: Mehrere Forms in mehreren Threads
Am im Forum: GUI: Windows-Forms

Nabend,
ich habe eine Anwendung mit 2 Forms. In der einen läuft eine Uhr und im anderen ist ein DataGridView.

- Der Grid beinhaltet Daten, die jede Sekunde aktualisiert werden.
- Die Uhr bleibt einige Millisekunden stehen, wenn die Daten im anderen Form aktualisiert werden

Ich habe das Aktualisieren über gridView.InvalidateColumn() implementiert.

Es ändert sich jede Sekunde der Inhalt einer Spalte und abhängig vom Wert der Spalte wird die entsprechende Zeile gefärbt.

Das sieht mit InvalidateColumn alles super aus, bis auf die benötigte Zeit. Dadurch wird die Uhr in der anderen Form jede Sekunde kurz angehalten.

Eine Lösung wäre das Update schneller zu machen. Ich weiß nur nicht wie.

Oder ich lagere die Uhr Form in einen eigenen Thread aus. Hier die Frage: Ist das überhaupt möglich?

Edit:


void m_UpdateTimer_Tick(object sender, EventArgs e)
        {
			for (int i = 0; i < gridView.ColumnCount; i++)
			{
				gridView.InvalidateColumn(i);
			}
        }
Oder kann man die Kontrolle in jeder Iteration der Schleife einmal an die MainLoop der GUI zurück geben?


Gruß, Tarion

Thema: updateSystem.NET
Am im Forum: Projekte

Wird der im Update mit geliefert oder ist der im UpdateController enthalten?

Thema: updateSystem.NET
Am im Forum: Projekte

Ich habe den Updater jetzt in 3-4 Hobby Projekten eingesetzt. Ich hatte nie größere Probleme und der Support war immer super. Bin jetzt auf die Beta umgestiegen aber nutze bei, da die Beta Statistiken nicht mehr nach Updateversionen filtern kann. Sonst hat sie aber viele Vorzüge wie Drag&Drop Erstellung von Updates und ist dabei so fehlerfrei wie die Final.

Ich benutze den Update nativ im Quellcode und nicht in der GUI. Läuft auch super. Man hat volle Kontrolle über alle Aktionen und Daten.

Thema: updateSystem.NET
Am im Forum: Projekte

Ja habe ich. Führt das zu Problemen? Ich kenne sonst keine Möglichkeit an Adminrecht zu kommen.