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.
Hast du schon mal ein Clone() probiert?
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...
Die haben beide die selbe Zugriffszeit (6ns). Daher nimm den, den deine Kombination aus Board und CPU maximal ansteuern kann.
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...
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...
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¶m2=diesunddas¶m3=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.
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?
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...
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.
Mmmmhhh, es gibt keine neue Verbindung.
Dann erzeuge doch einfach eine neue Verbindung für neue Daten.
Nutze WebClient.UploadFileAsync() mitsamt den zugehörigen Events.
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
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; }
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;
}
}
}
}
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:
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.
wenn du werte übergeben willst, dann würde ich das über statische variablen machen...
Dazu gibt es aber Konstruktoren (unter anderem).
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....
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...
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.
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.
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.
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...
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.
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...
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 ExampleThe 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
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)]]++.
Für Primzahlen bis zu 63Bit (rund 9.2 Trillionen): [KLASSE]Primzahlen und Integers
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.
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.
Schon mal auf der Microsoft-Seite gesucht?
Ist das überhaupt schon freigegeben?
DataGridView.AllowUserToResizeRows
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.
Ich würde jetzt mal behaupten, dass dir ohne Code nicht zu helfen ist...
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;
}
Liegt wahrscheinlich daran, dass erst die Daten geladen werden müssen.
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.
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...
Nimm doch mal nicht NLIST sondern LIST (WebRequestMethods.Ftp.ListDirectoryDetails)...
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.
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.
Ich vermute aber mal, dass man irgendwo in den Eigenschaften von #D einstellen kann, dass das eine Warnung generiert...
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.
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?
Die Antwort lautet WMI, das Tool heißt WMI Code Generator.
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.
Im 1.1er Framework nur über WinAPI-Funktionen oder eine Komponente, die diese Funktionen kapselt (Wie zum Beispiel Serial Communications : The .NET Way)
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.