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 Borg
Thema: AJAX Stream komprimieren?
Am im Forum: Web-Technologien

Zitat
Das Problem ist, daß es immer noch Leute gibt, die mit Modem surfen
Das einzig wirklich sinnvolle ist, das Problem einfach auszusitzen.

Thema: .NET-Framework zerschossen?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Lösch doch mal nach der Deinstallation den Ordner "%SYSTEMROOT%\Microsoft.NET", start neu und installier alles noch einmal.

Thema: [gelöst] Dienst findet dll nicht
Am im Forum: Rund um die Programmierung

Hast du zufällig mal meinen Hinweis mit SetServiceStatus beachtet? Scheinbar nicht. Kopier einfach den Code und passe ihn an.

Thema: System.IO.Directory.CreateDirectory unter Vista
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Um es zu klären: Vista erlaubt es keinen Programm ohne Berücksichtigung von UAC ins Programm- oder Windowsverzeichnis zu schreiben. Um jetzt das Problem zu lösen, dass zahlreiche Programme unter XP genau deshalb nicht ohne Adminrechte laufen (nebenbei: wer so etwas sechs Jahre nach Einführung von XP und damit von Sicherheit auf dem Desktop immer noch programmiert, gehört an die Wand gestellt und ...), virtualisiert Vista derartige Zugriffe. Das bedeutet, sie sind scheinbar erfolgreich, werden jedoch in Wirklichkeit in einen speziellen programmspezifischen Ordner in Users gespeichert und bei jedem Dateizugriff des Programms an die von ihm geforderte Stelle projiziert.

Thema: [erledigt] Design? Eventempfänger registrieren über Interfaces
Am im Forum: Rund um die Programmierung

Zitat
Ich will dabei aber vermeiden, dass eine Klasse sich aussuchen kann, welche Ereignisse sie verarbeitet.
Die Klassen sollten die benötigten Handler selbst registrieren. Alles andere wäre ein Verstoß gegen das OO-Paradigma der Kapselung und auch unnötig. Denn selbst wenn du die Handler zwangsweise für die Klasse registriert, stellt das ja noch keine Garantie dar, dass diese auch sinnvoll implementiert sind. Ein fauler Programmierer (bzw. einer, der nicht alle Events braucht) schreibt dann einfach leere Methodenrümpfe, um das Interface zu erfüllen. Das ist nicht sehr sinnvoll
Zitat
Vielleicht meinst du aber auch, das man dann gleich Methodenaufrufe mit Parameterübergabe verwenden könnte und auf die Ereignisse ganz verzichten?
Das wäre dann angebrachter.
Zitat
Du vermischst in deiner Implementation Manager und abhängige Klassen.
Das verstehe ich nicht. Abhängige Klassen? Abhängig von was?
Du triffst im Manager Aussagen und Entscheidungen über die zu verwaltenden Klassen, die einfach unnötig sind. Ein Interface stellt ja bloß eine formale Schnittstellenbeschreibung zur Verfügung. Es gibt keine Möglichkeit zu entscheiden, ob die Klasse auch die Funktionalität des Interface erfüllt. So könnte ich das Interface IComparer implementieren und in der Methode Compare den Hash (o.ä.) der Objekte berechnen. Ich erfülle damit formal das Interface, aber ignoriere den Sinn. Das kannst du nun mal nicht verhindern, wenn du Interfaces zur Verfügung stellst.
Zitat
Damit ist der wesentliche Unterschied, dass die Geräte sich nicht selbst für bestimmte Ereignisse registrieren, sondern der Manager dies für sie tut. Wenn ich dich richtig verstanden habe meinst du, dass sich damit die Ereignisse auch erübrigt haben weil man ja gleich entsprechende Methoden aufrufen könnte. Stimmt das so in etwa?
Wie gesagt: da du nur die Struktur, nicht aber die Funktionalität überprüfen kannst, musst du einfach darauf vertrauen, dass sich die Klassen korrekt verhalten.
Und damit ist es prinzipiell egal, ob du im Manager Events zur Verfügung stellst (wäre mein bevorzugter Weg) oder direkt Methoden der verschiedenen Interfaces aufrufst.
Aus den oben genannten Gründen halte ich es jedoch für besser, wenn die Klassen ihre Events selbst registrieren. Schließlich wirst du in einer WinForms-Anwendung auch nicht gezwungen, alle Events zu registrieren, ob du sie brauchst oder nicht. Das würde nur dazu führen, dass alle Programme aus sehr vielen leeren Methodenrümpfen bestünden...

Thema: Konzept Multithreadding in GUI Anwendung
Am im Forum: GUI: Windows-Forms

Du erstellst dir einen eigenen Dialog, so wie du ihn benötigst (ProgressBar, Buttons, Labels etc.). Dann startest du von der MainForm den WorkerThread und zeigst deinen Dialog mittels ShowDialog modal an. Der WorkerThread kann die ProgressBar etc. per Invoke ändern und schließt ihn nach Abschluss der Arbeit wieder. Danach kehrt ShowDialog wieder zurück und du machst weiter.

Thema: Drag & Drop einer *.MP3|*.Wav
Am im Forum: GUI: Windows-Forms

Wenn du nur innerhalb deiner Anwendung meinst: such mal im Forum nach "drag drop". Sollte mehr als genug Beispiele geben. Desweiteren gibt es Unmengen an Beispielcode in der MSDN-Lib.
Möchtest du Interaktion mit dem Explorer und anderen Anwendungen, musst du die folgenden COM-Interfaces implementieren:
wenn erwünscht: IDropSource, um deine Anwendung als Quelle von Drag&Drop-Objekten einzubinden,
wenn erwünscht: IDropTarget, um deine Anwendung als Ziel einzubinden,
wenn erwünscht: IDragSourceHelper, um die Bitmaps beim Draggen aus der Anwendung zu verändern,
wenn erwünscht: IDropTargetHelper, um die Bitmaps beim Draggen in die Anwendung zu verändern und
auf jeden Fall: IDataObject, welches das eigentliche Objekt beschreibt.

Thema: .NET-Framework zerschossen?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Der Fehlercode "0xc0000005" bedeutet "Access Violation". Irgendwo innerhalb des Frameworks muss also ein Schreib/Leseversuch auf eine ungültige Adresse erfolgen.
Poste bitte mal die komplette Fehlermeldung mit allen Infos.

Thema: [gelöst] Dienst findet dll nicht
Am im Forum: Rund um die Programmierung

Bei Diensten kopier ich mir immer den Code aus der MSDN-Lib zu ServiceBase und passe ihn dann an. Dort wird auch die WinAPI-Funktion SetServiceStatus benutzt...

Thema: Eigenen Datentyp Definieren
Am im Forum: Rund um die Programmierung

Und ich bastele dann eine rekursive Methode, die es schafft, alle Information des gesamten Universums in nur 7 Bit zu speichern...

EDIT: Dann dürfte Beamen auch kein Problem mehr sein...

Thema: Aus Schittbilder 3-D Modell erstellen
Am im Forum: Grafik und Sound

Das klingt eher nach einem mathematischen als nach einem C# Problem.

Thema: Process mit Adminrechten starten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

http://msdn2.microsoft.com/en-us/library/aa480470.aspx#cred_topic3

Thema: Pixel-Koordinaten einer Diagonalen
Am im Forum: Grafik und Sound

Du könntest dich auch näher mit dem JPEG-Format auseinandersetzen.
Schließlich wird bei der Kodierung das Bild ins YCbCr-Farbformat umgerechnet, d.h. die Helligkeitsinformationen liegen direkt vor.
Anschließend wird das Bild in 8x8 Pixel Blöcke aufgeteilt und jeweils einer DCT unterzogen, die den Block nach Frequenzen aufteilt. Nach der Sortierung enthält der erste Koeffizient die Grundfrequenz der Helligkeit und damit die durchschnittliche Helligkeit des Blockes.
Nun brauchst du also nur noch den Durchschnitt aller Blockhelligkeiten zu bestimmen und hast die Helligkeit des Bildes.

Thema: Timer & Co
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

using System.Threading;
// wohlgemerkt: der Timer aus System.Threading
private Timer checkTimer = new Timer( new TimerCallback( CheckIt ), null, Timeout.Infinite, Timeout.Infinite );
private AutoResetEvent checkSuccess = new AutoResetEvent( false );
private bool doWatch;
private Thread doWatchThread = new Thread( new ThreadStart( DoWhatever ) );

public void StartWatch()
{
   doWatch = true;
   doWatchThread.Start();
   checkTimer.Change( 500, Timeout.Infinite );
}

public void StopPortWatch()
{
   doWatch = false;
   checkTimer.Change( Timeout.Infinite, Timeout.Infinite );
   checkSuccess.Set();
   doWatchThread.Join();
}

public void CheckIt( object state )
{
   // Schnittstelle prüfen
   if (Schnittstelle bereit)
   {
      checkSuccess.Set();
   }
   if (doWatch)
   {
      checkTimer.Change( 500, Timeout.Infinite );
   }
}

public void DoWhatever()
{
   while(doWatch)
   {
      checkSuccess.WaitOne();
      if (doWatch)
      {
         // Port abfragen und was auch immer
      }
   }
}

EDIT: Code überarbeitet.

Thema: [erledigt] Design? Eventempfänger registrieren über Interfaces
Am im Forum: Rund um die Programmierung

Ich glaube, du hast einen kleinen Denkfehler.
Ereignisse dienen dazu, einer anderen Klasse irgendetwas mitzuteilen.
Wenn der Manager die Ereignisse auslöst, muss er sie auch anbieten. Jede Klasse abonniert dann nur die Events, die sie benötigt.
Und wenn der Manager die Bearbeitung in den Klassen anstoßen soll, müssen diese entsprechende Methoden bereitstellen (über ein Interface), welche der Manager dann aufruft.
Du vermischst in deiner Implementation Manager und abhängige Klassen. Deklariere lieber ein Interfaces IManageable mit zwei Methoden RegisterEvents() und UnregisterEvents(), welche dann klassenspezifisch die benötigten Events des Managers registrieren bzw. deregistrieren.
RegisterEvents wird dann beim Hinzufügen zu der Verwaltungsstruktur des Managers aufgerufen (im Allgemeinen List<IManageable>), UnregisterEvents beim Entfernen aus dem Manager.

Also etwa:

public interface IManageable
{
   // benötigte Events des Manager hier registrieren
   public void RegisterEvents( Manager manage );
   // und hier wieder deregistrieren
   public void UnregisterEvents( Manager manage );
}

public class Manager
{
   // ...
   private List<IManageable> myManagedObjects = new List<IManageable>();
   public void Add( IManageable myClass )
   {
      if (myClass != null)
      {
         myManagedObjects.Add( myClass );
         myClass.RegisterEvents( this );
      }
   }
   public void Remove( IManageable myClass )
   {
      if ((myClass != null) && (myManagedObjects.Contains( myClass ))
      {
         myClass.UnregisterEvents( this );
         myManagedObjects.Remove( myClass );
      }
   }
}

Zusätzliche Interfaces können deine Klassen nach Belieben implementieren, um jedoch verwaltet werden zu können, müssen sie IManageable implementieren.

EDIT: Code verbessert

Thema: Eigenes ToolStripMenuItem schreiben
Am im Forum: GUI: Windows-Forms

[Kristallkugelmodus]
Bitte Wie poste ich richtig? Punkt 5 beachten
[/Kristallkugelmodus]

Thema: Timer & Co
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Deine Idee klingt irgendwie sehr ... verworren.

Gemeinhin löst man so etwas mit Synchronisation mehrerer Threads.
Bei dir klingt es allerdings so, als wenn du die Timer aus System.Windows.Forms nutzt. Diese sind dafür natürlich nicht zu verwenden.

Du hast einen Thread, der in einer Schleife an einem AutoResetEvent.WaitOne wartet.
Ein vom Timer zyklisch aufgerufener Thread prüft die Schnittstelle, falls die Prüfung erfolgreich ist, wird das AutoResetEvent signalisiert.
Der andere Thread setzt jetzt seine Arbeit fort. Wenn er sie fertig gestellt hat, beginnt der nächste Schleifendurchlauf wieder mit AutoResetEvent.WaitOne.

Thema: Verständnissproblem ArrayList sortieren...
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

IComparer musst du aber lernen.

Du speicherst ListViewItem in deiner ArrayList (im FW 2.0 lieber List<T> verwenden). Und für diese existiert kein Vergleichsoperator.
Das es beim ersten Wert nicht knallt, liegt daran, dass Sort die Anzahl der Elemente prüft (bei einem Element kann man sich das Sortieren halt sparen).
Desweiteren ist es absolut unnötig (und ressourcenfressend) die Liste bei jedem Schleifendurchlauf zu sortieren. Einmal danach reicht doch.

public class myLviIntTagComparer : IComparer
{
   public int Compare ( Object x, Object y )
   {
      ListViewItem lvi1 = x as ListViewItem;
      ListViewItem lvi2 = y as ListViewItem;
      return ((int)lvi1.Tag).CompareTo( (int)lvi2.Tag );
   }
)

a.Sort( new myLviIntTagComparer() );

EDIT: Codekorrektur

Thema: Daten in IList gruppieren
Am im Forum: Rund um die Programmierung

Ich nehme an, du meinst so etwas in der Art:

public struct DreiInts
{
   public int a, b, c;
   public DreiInts( int a, int b, int c)
   {
      this.a = a; this.b = b; this.c = c;
   }
}

List< DreiInts > meineListe = new List< DreiInts >();

Jetzt weiß ich nicht genau, was du mit überprüfen meinst.

// alle heraussuchen, bei denen die ersten beiden ints gleich sind
List< DreiInts >< zweiGleich = meineListe.FindAll( delegate bool( DreiInts value ) { return (value.a == value.b ); } );

// nur Indize heraussuchen
List<int> Indize = new List<int>();
for( int i = 0; i < meineListe.Count; i++ )
{
   if (meineListe[i].a == meineListe[i].b)
   {
      Indize.Add( i );
   }
}

Thema: ListView: Mehrfachauswahl verhindern
Am im Forum: GUI: Windows-Forms

Wenn MultiSelect false ist, kann auch nur eine Zeile ausgewählt werden. Also wird es irgendwo wieder auf true gesetzt. Such doch mal nach MultiSelect über das ganze Projekt.

Thema: Passwort übertragen
Am im Forum: Web-Technologien

Ja.

Thema: Mehre Dateien in einer speichern
Am im Forum: Rund um die Programmierung

Du solltest aber nicht ein par hundert Bilder als Base64 kodieren und in XML speichern. Speichere lieber die Bilder als Dateien in ein Zip und füge eine XML-Datei hinzu, die die Dateinamen der Bilder mit den zusätzlichen Informationen verknüpft.
Ansonsten gibt es ja auch noch EXIF und IPTC...

Thema: AutoResetEvent sicher?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat MSDN-Lib:

Zitat
Calling Set signals AutoResetEvent to release a waiting thread. AutoResetEvent remains signaled until a single waiting thread is released, and then automatically returns to the non-signaled state. If no threads are waiting, the state remains signaled indefinitely.
Das bedeutet also, dass nur ein einziger Thread das WaitOne abschließt, alle anderen warten weiter.

Thema: AutoResetEvent sicher?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich verstehe nicht ganz, was die Anzahl der Threads mit der Funktionalität des AutoResetEvents zu tun haben soll?

Thema: Formel als eigenschaft
Am im Forum: Rund um die Programmierung

Das sagte ich doch. Dein Computer muss mathematische Strukturen erfassen, d.h. parsen können.
Hast du einen solchen Parser, könntest du beispielsweise schreiben:

# die Raute ist Kommentar; mit => sind die Antworten des Systems gekennzeichnet
# Weg
DEFINE ENTITY s CALL "Weg"
DEFINE UNIT "m" AS s CALL "Meter"
DEFINE UNIT "km" AS s WHERE [km]=[m]/1000 CALL "Kilometer"
# Zeit
DEFINE ENTITY t CALL "Zeit"
DEFINE UNIT "s" AS t CALL "Sekunde"
DEFINE UNIT "min" AS t WHERE [min]=[s]/60 CALL "Minute"
DEFINE RELATION s(t) CALL "Weg nach Zeit"
# Geschwindigkeit
DEFINE ENTITY v CALL "Geschwindigkeit"
DEFINE RELATION v(t)=s'(t) CALL "Geschwindigkeit nach Zeit"
# Beschleunigung 
DEFINE ENTITY a CALL "Beschleunigung"
DEFINE RELATION a(t)=v'(t) CALL "Beschleunigung nach Zeit"

# beschl. Bewegung: s = a/2*t²
SET meinSturz AS s(t)=9.81/2*t*t
=> meinSturz:s(t)=9.81/2*t*t

CALC meinSturz(5) 
=> 122.625 m
CALC meinSturz(5) IN "km"
=> 0.122625 km

SET meineGeschw AS v(t) FROM meinSturz
=> meineGeschw:v(t)= meinSturz:s'(t) = 9.81*t
CALC meineGeschw(10)
=> 98.1 m/s

SET meineBeschl AS a(t) FROM meinSturz
=> meineBeschl:a(t) = meinSturz:v'(t) = meinSturz:s''(t) = 9.81
CALC meineBeschl(17)
=> 9.81 m/s²
CALS meineBeschl(17) IN "s:km;t:min"
=> 35,316 km/min²
Das Beispiel ist jetzt zwar etwas umfangreicher geworden, aber ich hoffe, es macht deutlich, wie ich das meinte. Du benötigst also zuerst mal eine Syntax, dann einen Parser dafür. Dieser generiert ein Netz mit Beziehungen zwischen verschiedenen Entitäten. Parameter dieser Beziehungen sind die Operationen, welche du natürlich auch kennen musst.
Das bedeutet, in deinem Code gibt es gar keine Klassen, die den verschiedenen physikalischen Größen entsprechen, sondern nur eine Entitäten-Klasse und eine Beziehung-Klasse. Die Logik kommt durch die Verknüpfungen von Entitäten und Beziehungen zustande.

EDIT*: Beispiel überarbeitet.

Thema: Exe Datein aufrufen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Oder kurz (dafür ohne weitere Einflussnahme):

Process.Start( "myapp.exe", "myarguments" )
Davon gibt es auch eine weitere Überladung, bei der du Benutzername und Passwort angeben kannst, mit dem der Prozess gestartet werden soll.

Thema: Formel als eigenschaft
Am im Forum: Rund um die Programmierung

1. Sorry, wenn ich dass sage, aber wenn du Ampère nicht richtig schreiben kannst und von Grad Kelvin redest, sehe ich von physikalischer Seite schwarz.

2. Um das ganze auf ein halbwegs sinnvolle Grundlage zu stellen, würde ich nicht die Einheiten sondern die physikalischen Größen per Klasse erfassen.
Also hättest du dann Klassen wie Weg, Masse, Zeit, elektrische Stromstärke, Temperatur, Stoffmenge und Lichtstärke, die intern ausschließlich die SI Grundeinheiten verwenden.
Die Klasse würde dann Methoden zur Umrechnung anbieten. Wenn du also eine Instanz von Temperatur mit dem Wert 1000 (laut SI also 1000 Kelvin) hast, bietet diese ein Methode namens InCelsius an, welche in diesem Fall 726.85 liefern würde.

3. Dennoch, wird dies allein nicht sehr sinnvoll werden, wenn du dem Computer die Unterscheidung zwischen Einheiten nahe bringen willst. Das eigentliche Problem stellt ja nicht die Klassenstruktur dar (auch wenn ich nicht glaube, dass es sinnvoll ist, dafür eine Struktur zu erstellen). Das Problem ist vielmehr, dass du dem Computer die sinnvollen Verknüpfungen zwischen beispielsweise Weg s und Zeit t darlegen musst. Davon gibt es aber mehrere (Länge s, Fläche s², Volumen s³, Geschwindigkeit s/t, Beschleunigung s/t²). Daher macht es in meinen Augen nur Sinn, dass auf die mathematische Grundlage zu stellen. Also Geschwindigkeit v = ds/dt u.ä. Um also physikalische Beziehungen sinnvoll darstellen zu können, müsstest du erstmal mathematische Beziehungen erfassen und darstellen können. Schließlich stellen die physikalischen eine Untermenge der mathematischen dar.

4. Wenn es dir nur um Umrechnung zwischen den Einheiten geht, benötigst du diese ganzen Strukturen nicht, das ist relativ problemlos möglich.

Thema: multithreading
Am im Forum: Netzwerktechnologien

Auch zum letzten Mal:
Wir haben dich verstanden. Wir haben dir auch gesagt, wie du verschiedene Rechner anpingen kannst.

Allerdings verwendet Ping ein ICMP Echo Request (Internet Control Message Protocol), welches auf IP (Internet Protocol) basiert. Daher kann man auch keine bestimmten Ports anpingen, da es Ports erst im ebenfalls IP-basierten TCP (Transmission Control Protocol) gibt, sondern nur bestimmte IP-Adressen.
Um jetzt die Ports zu scannen, müsstest du dich im einfachsten Fall jeweils per UDP und TCP mit ihnen zu verbinden versuchen. Was auch immer du tust, so wirst du doch nur feststellen, dass du keine Lücke hast, die jemand, der genauso viel wie du weiß, finden würde...
Um mit (relativer) Sicherheit irgendwelche Aussagen treffen zu können, müsstest du jedoch einen ganzen Stapel von Tests über die Ports laufen lassen.
Da dir diese Kenntnisse fehlen, wiederhole ich noch einmal, dass du keinen wirklichen Erfolg haben wirst.

Lad dir lieber einen der vielen Portscanner runter. Wenn du dich doch etwas mehr in die Thematik vertieft hast, kannst du auch nmap verwenden (gibt es auch für Windows: nMapWin).

Thema: Eigenen Datentyp Definieren
Am im Forum: Rund um die Programmierung

Ich frage mich jetzt ehrlich gesagt, was die Speicherung von "mehreren TB" Videos mit deinen obigen Fragen (vor allem der ersten) zu tun hat???

Aber um es kurz zu sagen: Videos kannst du nicht mit einer der allgemeinen Packer (ZIP, RAR etc.) weiter komprimieren. Dabei kommen höchstens 1% bis 3% Verkleinerung heraus, dafür muss die Datei aber ewig gepackt und entpackt werden (wieder Latenz/Durchsatz in Relation zum Speicher).
Die einzige Möglichkeit Videos zu verkleinern ist deren Bitrate zu reduzieren. Um den damit einhergehenden Qualitätsverlust so gering wie möglich zu halten, sollte man dazu aber formatspezifische Requantisierer einsetzen...

Ausserdem bekommst du momentan interne 500GB Festplatten für locker 120€.
Besorg dir nen alten Rechner (400MHz reichen locker, ideal wäre ein älterer Server mit PCI-X) mit LAN (Gigabit, wenn Netz-Infrastruktur und PCI-X vorhanden) und zusätzlichen IDE-Controllern, knall dort Linux rauf und immer wenn du Bedarf hast, baust du eine neue Platte ein..

Thema: Statische generische Methode?
Am im Forum: Rund um die Programmierung

Wenn du eine eindeutige Beziehung Parametername <=> Parametertyp hast, sind jeweils eigene Methoden empfehlenswert.
Nur falls deine Klasse allgemein auf unbekannte Typen mit unbekannten Namen losgelassen würde (beispielsweise zur Abfrage von INI-Dateien), würde ich

public static T GetValue<T>( string ValueName )
verwenden.