Laden...
B
Borg myCSharp.de - Member
Berlin, Germany Dabei seit 23.08.2006 1.529 Beiträge
Benutzerbeschreibung

Forenbeiträge von Borg Ingesamt 1.529 Beiträge

02.03.2007 - 09:18 Uhr

Auf http://msdn2.microsoft.com/en-us/library/aa969363.aspx findet sich Code.
Aber noch wichtiger: dort findet sich folgender Hinweis:

Note The following and all subsequent code examples are taken from the recipe handler sample included in the Windows Software Development Kit (SDK). Du solltest also mal dort schauen.

23.02.2007 - 11:56 Uhr

Hast du schon mal ein Clone() probiert?

23.02.2007 - 00:06 Uhr

Das mit der ArrayList war nur überspitzt gemeint. In .NET 2.0 ist diese wirklich nicht mehr empfehlenswert.

Nur habe ich nach dem Eingeständnis

Ne das funktioniert deswegen nicht weil meine ganze Konstruktion Müll ist. ein interessantes neues Design oder zumindest Fragen danach erwartet. Nur leider war
Bestimmt, aber inzwischen habe ich ne fertige Variante erstellt die funktioniert beim erstellen. nicht sehr aussagekräftig und die Methode nicht wirklich ein Fortschritt...

22.02.2007 - 23:41 Uhr

Die haben beide die selbe Zugriffszeit (6ns). Daher nimm den, den deine Kombination aus Board und CPU maximal ansteuern kann.

22.02.2007 - 23:30 Uhr

nach meinem bescheidenen Wissen sollte das klappen, oder?

Es klappt zwar, nur wenn du List<object> benutzt, kannst du auch auf Generics verzichten und ArrayList nehmen...

22.02.2007 - 10:23 Uhr

Installiere einen beliebigen Streaming-Server, konfiguriere ihn so, dass er nur in lokale Netze streamt.
Dann erstelle eine VPN-Verbindung mit Verschlüsselung und Authentifizierung.
Jetzt wählst du dich vom externen Rechner einfach per VPN ins lokale Netz ein und gut ist...

EDIT: Dann kannst du aber auch über eine Freigabe direkt auf alle Dateien zugreifen und benötigst gar kein Streaming mehr...

21.02.2007 - 23:35 Uhr

Was willst du denn zu dem "Paket" hinzufügen? Im HTTP gibt es gar keine Pakete. Pakete ist ein ganz anderer Netzwerklayer.
Du kannst ganz normal per URI Parameter übergeben. Also zum Beispiel: "http://www.myweb.de/my_parameter_upload?param1=sonstewat&param2=diesunddas&param3=schaumalhier".
Dort wird dann das Script "my_parameter_upload" mit den entsprechenden Parametern aufgerufen, welches den Upload der Datei aktzeptieren muss.
Wie du die Methode angeben kannst, hast du doch selbst geschrieben...

Ich vermute mal, dass du dich noch mal mit HTTP auseinandersetzen musst.

21.02.2007 - 12:03 Uhr

Man könnte auch eine eigene Collection schreiben, die Delegates aufnimmt und in der richtigen Reihenfolge aufruft. Oder ein Interface definieren, das die Aufrufmodalitäten regelt (inklusive Parameterübergabe) und dann Klassen, die dieses Interface implementieren in eine Collection einfügt. Man könnte natürlich auch einfach - wie von herbivore vorgeschlagen - if...return benutzen. Es gibt halt viele Möglichkeiten, in einer allgemeinen Programmiersprache strenge Linearität auszudrücken.

Und damit komme ich zu der eigentlichen Frage: Ist C# wirklich die optimale Sprache für eine derartige Maschinensteuerung?

21.02.2007 - 11:37 Uhr

Erstell dir halt eine Methode zum Laden. Diese wird dann ganz normal vererbt. Der Load-Konstruktor ist dann bloß Vereinfachung durch Laden beim Initialisieren. Nur so kannst du sicherstellen, dass die gewünschte Funktionalität vorhanden ist.
Wobei es nach der Formulierung schon wieder nach Interface schreit...

21.02.2007 - 11:32 Uhr

1.a Du kannst die Methode, mit der die Datei gesendet werden soll, angeben.
1.b Du brauchst doch bloß als URI den Link zu einem Script o.ä. angeben, dass die Datei per POST annimmt.
2. Genauso, wie du es vorher gemacht hast.

20.02.2007 - 23:31 Uhr

Mmmmhhh, es gibt keine neue Verbindung.

Dann erzeuge doch einfach eine neue Verbindung für neue Daten.

20.02.2007 - 23:27 Uhr

Nutze WebClient.UploadFileAsync() mitsamt den zugehörigen Events.

20.02.2007 - 14:23 Uhr

Da sagst du jetzt etwas, was du vorher nicht gesagt hast.
Nämlich, dass du per TCP/IP sendest. In welches Protokoll das wiederum gekapselt wird, braucht dich nicht zu interessieren.
Und das wiederum heißt: solange Sender und Empfänger jeweils eine neue Verbindung für einen neuen Transfer aufmachen, sind diese auf dem Anwendungs-Layer (also bei dir) auch getrennt.
Um den Rest kümmern sich Treiber und Netzwerkstack.

EDIT: spellchecks

20.02.2007 - 11:47 Uhr

Wenn x und y uint sind, kannst du auch ein ulong verwenden:

private static ulong Multiplex( uint x, uint y )
{ return (y << 32) | x; }
private static void DeMultiplex( ulong res, out uint x, out uint y )
{ x = (uint)(res & 0xFFFFFFFF); y = (uint)(res >> 32); return; }
18.02.2007 - 14:40 Uhr
public enum AbortRetryIgnore { Abort, Retry, Ignore }

public delegate AbortRetryIgnore StepErrorEvent( object sender, StepErrorEventArgs e );

public class StepErrorEventArgs : EventArgs
{
   public readonly int StepToPerform;
   public readonly string Message;
   public readonly int TryCount;
   public StepErrorEvventArgs( int Step, string Message, int TryCount ) : base()
   {
      StepToPerform = Step;
      this.Message = Message;
      this.TryCount = TryCount;
   }
}

public class StepMachine
{
   public readonly int StepCount;
   public readonly string MachineID;
   public event StepErrorEvent StepError;
   public delegate void StepDelegate();

   private Dictionary<int,StepDelegate> Steps;
   private int NextStep;
   private bool Repeat;
   private int TryCount;
   private bool ErrorOccurred;

   public StepMachine( string Machine ) : base()
   {
      MachineID = Machine;
      StepCount = 2;
      Steps = new Dictionary<int,StepDelegate>(StepCount);
      Steps[0] = new StepDelegate( Step00 );
      Steps[1] = new StepDelegate( Step01 );
      NextStep = 0;
   }

   public int DoStep()
   {
      ErrorOccurred = false;
      Repeat = false;
      TryCount = 1;
      do
      {
         Steps[NextStep]();
      } while( Repeat )
      if ( !ErrorOccurred )
      {
         NextStep = (NextStep < StepCount) ? (NextStep + 1) : 0;
      }
      return NextStep;
   }

   private void Step00()
   {
      // do something
      if ( some error occurred )
      {
         OnStepError( "meine Fehlermeldung 1." );
      {
   }

   private void Step01()
   {
      // do something else
      if ( some error occurred )
      {
         OnStepError( "meine Fehlermeldung 2." );
      {
   }

   private void OnStepError( string ErrorText )
   {
      ErrorOccurred = true;
      StepErrorEvent Handler = StepError;
      if (Handler != null)
      {
         StepErrorEventArgs args = new StepErrorEvventArgs(  NextStep, ErrorText, TryCount );
         switch( Handler( this, args ) )
         {
            case AbortRetryIgnore.Abort:
            case AbortRetryIgnore.Ignore:
               Repeat = false;
               break;
            case AbortRetryIgnore.Retry:
               TryCount++;
               ErrorOccurred = false;
               Repeat = true;
               break;
         }
      }
   }
}
18.02.2007 - 13:52 Uhr

Mein merkwürdigstes Erlebnis ist eine Weile her.

Es war noch während der Schulzeit. Ich bin eines Dienstags Abend ganz normal ins Bett gegangen, habe geschlafen, bin Mittwoch morgen aufgestanden, in die Schule gegangen, nachmittags arbeiten, abends an den Rechner und wieder ins Bett (zusammengefasst).
Kurz gesagt: ein ganz normaler Mittwoch.
Am darauffolgenden Tag, bin ich wieder aufgestanden, habe meine Sachen für Donnerstag gepackt und bin in die Schule gegangen. Dort erfuhr ich dann, dass Mittwoch ist. Es stand auf jeder Uhr, auf jedem Kalender, im Fernsehen und im Radio. Ich war den ganzen Tag zeitlich total desorientiert, weil ich immer erwartete, dass Donnerstag ist und ich mich auch so verhalten müsste.

Es gibt also nur drei Erklärungen:

  1. Ich bin in eine Zeitschleife geraten und habe den Mittwoch zweimal erlebt,
  2. es handelt sich um eine globale Verschwörung, deren Opfer ich bin oder
  3. ich habe tatsächlich in der Nacht von Dienstag auf Mittwoch einen kompletten Tag erträumt und nicht bemerkt, dass dies ein Traum war.
18.02.2007 - 12:21 Uhr

Ich würde jeweils eine eigene Methode pro Schritt schreiben und ein Dictionary<step,delegate> mit den Schritten und den zugehörigen Methoden füllen.
im Konstruktor wird eine Membervariable Step auf den ersten Schritt gesetzt.
Die Step-Methode würde dann einfach den entsprechenden Delegate aufrufen und danach Step erhöhen (round-about).
Wenn du jetzt noch den Operator ++ überlädst, kannst du mit myMachine++ einen Schritt auslösen.

18.02.2007 - 11:50 Uhr

wenn du werte übergeben willst, dann würde ich das über statische variablen machen...

Dazu gibt es aber Konstruktoren (unter anderem).

18.02.2007 - 11:36 Uhr

Ich suche grad verzweifelt nach einem Weg, um Daten, die sich auf knapp 1000 Files verteilen und zusammen 1,6 GB auf meiner Platte beanspruchen, gleichzeitig in den RAM zu quetschen

Memory Mapped Files.

Nun outet Euch mal: wie doof seid Ihr (manchmal)?

Mein Klassiker ist beim Zugriff über den Remote Desktop die Netzwerkverbindung (natürlich die, über die ich mich verbinde) zu deaktivieren...
Ist mir schon zwei Mal passiert. Vor allem wird man vor Windows gewarnt, aber nicht davor. Schön, wenn man sich eigentlich den Weg sparen wollte. Na ja, wer es nicht im Kopf hat, muss es halt in den Beinen haben....

16.02.2007 - 15:47 Uhr

Oder, um es einfach zu machen: nimm dir WinZIP oder WinRAR o.ä. Programme.
Dort kannst du das SEA konfigurieren und nach dem Entpacken gleich ein Programm starten lassen.
Alternativ mach es halt selbst...

16.02.2007 - 15:35 Uhr

Ich würde auch die erste vorziehen, kann allerdings sogar eine Begründung anführen:
sie ist objekt-orientiert gruppiert, die zweite hingegen verfahrensorierntiert, also prozedural.

In beiden Fällen werden drei von einander unabhängige Objekte erzeugt.
Im ersten Code wird erst jedes Objekt fertig bearbeitet, bevor das nächste dran kommt. Du gruppierst also nach Objekt.
Im zweiten Code wird hingegen nach den durchzuführenden Aktionen gruppiert und diese für alle Objekte durchgeführt.

15.02.2007 - 12:01 Uhr

Ohne viel Ahnung von ASP.NET und GridViews zu haben, vermute ich mal, dass es daran liegt, dass der Browser nur mit Dateien umgehen kann.
Das GridView lädt zwar die Bilder, speichert sie jedoch nicht als (temporäre) Dateien zwischen.
Deshalb kann der Browser sie auch nicht herunterladen und anzeigen.
Ich vermute, dass du das von Hand machen werden musst, indem du dir eine .aspx-Seite bastelt, die einen Parameter bekommt und als Ergebnis ein Bild (aus der DB) sendet.

15.02.2007 - 11:53 Uhr

Bei deinen ganzen Close fehlt nwStream.Close().
Du solltest in umgekehrter Reihenfolge closen, in der du geöffnet hast.
Bei dir also: erst FileStream, dann NetworkStream und anschließend TcpClient.

14.02.2007 - 21:21 Uhr

Für Primzahlen bis 1 Mrd. wäre es aber weiterhin zu viel.

Die oben von mir verlinkte Klasse umgeht dieses Problem, indem sie immer blockweise das Sieb anwendet. Da die Primzahlen sowieso gesichert werden müssen, wird ein abgeschlossener Block in eine Datei geschrieben. Aus dieser werden auch bekannte Primzahlen für jeden weiteren Block geladen. Das setzt zwar die Rechengeschwindigkeit herab, lässt sich aber dafür kontinuierlich im Hintergrund ausführen, da der Speicherbedarf konstant ist.

Momentan nutzen die Klassen long als Zahlenformat.
Falls das jemand auf BigInt anpassen möchte, nur zu...

14.02.2007 - 21:16 Uhr

Um es verständlicher zu machen: wenn du dem ersten Student den fehlenden Punkt gibst, dann hat dieser mit Sicherheit mindestens einen Punkt. Das können alle anderen nicht von sich behaupten und damit ist es nicht mehr gleichverteilt, also nicht mehr fair.

14.02.2007 - 21:05 Uhr

Kopier dir den Code zu "ServiceBase Class" aus der MSDN Lib und passe ihn an. Der hat bei mir immer funktioniert...

EDIT: Dann fällt dir auch dein Fehler auf: du musst den Status des Service manuell auf Running setzen...

EDIT2: Woraufhin mir mal wieder auffällt, dass die ServiceBase-Klasse auch in Version 2 noch lange nicht komplett ist...

14.02.2007 - 21:02 Uhr

Wie jetzt: "spuckt nichts brauchbares aus"?

Also ich finde zwei Klicks von FontCollection.Families entfernt folgendes:

Windows Forms Programming
How to: Enumerate Installed Fonts
See Also Example

The InstalledFontCollection class inherits from the FontCollection abstract base class. You can use an InstalledFontCollection object to enumerate the fonts installed on the computer. The Families property of an InstalledFontCollection object is an array of FontFamily objects.

Example
The following example lists the names of all the font families installed on the computer. The code retrieves the Name property of each FontFamily object in the array returned by the Families property. As the family names are retrieved, they are concatenated to form a comma-separated list. Then the DrawString method of the Graphics class draws the comma-separated list in a rectangle.

If you run the example code, the output will be similar to that shown in the following illustration.

FontFamily fontFamily = new FontFamily("Arial");
Font font = new Font(
   fontFamily,
   8,
   FontStyle.Regular,
   GraphicsUnit.Point);
RectangleF rectF = new RectangleF(10, 10, 500, 500);
SolidBrush solidBrush = new SolidBrush(Color.Black);

string familyName;
string familyList = "";
FontFamily[] fontFamilies;

InstalledFontCollection installedFontCollection = new InstalledFontCollection();

// Get the array of FontFamily objects.
fontFamilies = installedFontCollection.Families;

// The loop below creates a large string that is a comma-separated
// list of all font family names.

int count = fontFamilies.Length;
for(int j = 0; j < count; ++j)
{
   familyName = fontFamilies[j].Name;  
   familyList = familyList + familyName;
   familyList = familyList + ",  ";
}

// Draw the large string (list of all families) in a rectangle.
e.Graphics.DrawString(familyList, font, solidBrush, rectF);

Compiling the Code
The preceding example is designed for use with Windows Forms, and it requires PaintEventArgs e, which is a parameter of PaintEventHandler.

See Also
Other Resources
Using Fonts and Text

14.02.2007 - 12:51 Uhr

Mann kan immer den ersten Student hinterher nog ein Punkt geben.

Das ist dann aber nicht mehr zufällig. Wenn, dann musst du einem zufälligen Studenten einen Punkt geben: myDistrib[myStudentList[(new Random()).Next(myStudentList.Count)]]++.

13.02.2007 - 23:26 Uhr

Für Primzahlen bis zu 63Bit (rund 9.2 Trillionen): [KLASSE]Primzahlen und Integers

13.02.2007 - 12:07 Uhr

Auch wenn dieser Ansatz ggf. durch Rundungsfehler (double ist immer noch ungenau) unschoen wird und der urspruengliche Beitrag scheinbar eine ganzzahlige Aufteilung sucht.

Aus diesem Grund habe ich auch keine Umwandlung in int vorgenommen.
Wenn es wirklich nur ints sind, würde ich die andere Methode bevorzugen. asterinex konnte sich aber eine derartige Lösung nicht vorstellen und daher wollte ich ihm diesen Gefallen tun...

Ich find Code in englisch generell gut. Aber - dann sollte man auch alles in englisch halten. "Studenten"...

Wir werden uns anpassen.

13.02.2007 - 11:58 Uhr

http://www.codeguru.com/vb/gen/vb_system/article.php/c1661
http://www.developerfusion.co.uk/show/97

Ctrl-Alt-Del kann aus Sicherheitsgründen nicht geblockt werden.

13.02.2007 - 11:45 Uhr

Schon mal auf der Microsoft-Seite gesucht?
Ist das überhaupt schon freigegeben?

13.02.2007 - 11:41 Uhr

DataGridView.AllowUserToResizeRows

13.02.2007 - 00:01 Uhr

Nur der Vollständigkeit halber:

Du kannst höchstens den Ordner für Eigene Dateien global umstellen (ich glaube mit TweakUI geht das; ansonsten direkt über die Registry).

Zumindest bei XP kann jeder User seine Eigenen Dateien über ihre Eigenschaften verschieben.

Ansonsten würde das ganze nur über Hooks gehen, wobei man hierbei den Bereich von .NET verlässt.

12.02.2007 - 23:48 Uhr

Ich würde jetzt mal behaupten, dass dir ohne Code nicht zu helfen ist...

12.02.2007 - 23:42 Uhr
private static Dictionary<Student,double> DistributePoints( List<Student> students, double pointTotal )
{
   Random rnd = new Random();
   Dictionary<Student,double> pointDistrib = new Dictionary<Student,double>( students.Count );
   double sum = 0;
   foreach( Student student in students )
   {
      double loc = rnd.NextDouble();
      pointDistrib.Add( student, loc );
      sum += loc;
   }
   if (sum == 0)
      throw new InvalidOperationException("Please desactivate the Infinite Improbability Drive before invoking this method!");
   double factor = pointTotal / sum; 
   foreach( Student student in students )
   {
      pointDistrib[ student ] *= factor;
   }
   return pointDistrib;
}
12.02.2007 - 22:54 Uhr

Liegt wahrscheinlich daran, dass erst die Daten geladen werden müssen.

11.02.2007 - 14:50 Uhr

Gemeint sind nicht diese Timer, sondern die Geplanten Tasks (Scheduled Jobs). Diese kannst du per WMI anlegen und verwalten (Namespace \root\cimv2, Klasse Win32_ScheduledJobs).
Mehr Kontrolle gibt's es über COM. Such mal nach Scheduled Job im Platform SDK.

11.02.2007 - 11:50 Uhr

Und zu deiner eigentlichen Frage: das ldstr-Kommando ist fünf Bytes lang. Das erste ist der Code für ldstr, die anderen vier sind die Adresse des Strings. Der IL Disassembler ist nur so nett, dir gleich den String mit anzugeben. Man kann aber auch einen Hex-View dazu schalten...

11.02.2007 - 11:46 Uhr

Nimm doch mal nicht NLIST sondern LIST (WebRequestMethods.Ftp.ListDirectoryDetails)...

09.02.2007 - 19:23 Uhr

Wenn dir die Objekte keine Methoden anbieten, um das Dokument in einen Stream zu speichern bzw. als Byte-Array zu erhalten, wird dir nur der Umweg über die Platte bleiben.

09.02.2007 - 19:21 Uhr

Nachdem ich den Thread einfaches beispiel zu netzwerken in C# gelesen hatt und mich kopfschüttelnd abwandte, fiel mir beim Lesen von Was sind hier für euch die Softwareperlen? eine mögliche Lösung ein.

Um den ganzen Aussagen mit "meine Suche hat nichts ergeben" gleich den Wind aus den Segeln zu nehmen, die ja meist darauf basieren, dass die Leute nicht richtig suchen können, weil ihnen keine Suchbegriffe einfallen, wäre vielleicht eine Tag-basierte Suche hilfreich.
Ich meine damit eine Liste von verschiedenen Stichwörtern, die je nach Häufigkeit ihres Abfragen größer geschrieben werden.
Wenn dieses rekursiv implementiert wird und eine immer weiter einschränkende Suche ermöglicht, müssten derartige Klagen der Vergangenheit angehören.

Was haltet ihr von der Idee bzw. wie kompliziert ist es diese zu implementieren?

Ich gehe davon aus, dass sich das für das aktuelle Forum nicht mehr lohnt.
Daher möchte ich es gleich für die neue Version vorschlagen.

09.02.2007 - 14:25 Uhr

Ich vermute aber mal, dass man irgendwo in den Eigenschaften von #D einstellen kann, dass das eine Warnung generiert...

09.02.2007 - 12:34 Uhr

Das stellt ja auch keinen Fehler dar.
Wenn du in der Methode eine gleichnamige Variable hast, überdeckt diese das Feld der Klasse. Um trotzdem auf die Klassenvariable zuzugreifen, referenziere sie mit this.

09.02.2007 - 11:57 Uhr

Sei mit bitte nicht böse, aber zu selbständigem Denken bist du schon fähig, oder?
Was meinst du wohl, wofür es ein Menü namens "Code Language" gibt?

09.02.2007 - 11:14 Uhr

Die Antwort lautet WMI, das Tool heißt WMI Code Generator.

08.02.2007 - 20:35 Uhr

Ehrlich gesagt, vermute ich eher, dass die RGB-Werte eben doch nicht übereinstimmen...

EDIT: Schreib doch mal direkt myLabel.BackColor = myLabel.Parent.BackColor hinter InitializeComponent() in den ctor deiner Form.

08.02.2007 - 20:34 Uhr

Im 1.1er Framework nur über WinAPI-Funktionen oder eine Komponente, die diese Funktionen kapselt (Wie zum Beispiel Serial Communications : The .NET Way)

08.02.2007 - 20:23 Uhr

oder Addition.

Die Addition zweier Zeitpunkt (DateTime) macht physikalisch keinen Sinn und ist daher auch nicht definiert.
Definiert ist die Subtraktion zweier Zeitpunkte, das ergibt eine Zeitdauer (TimeSpan), sowie die Addition von Zeitpunkt und Zeitdauer, was logischerweise wiederum einen Zeitpunkt ergibt.