Servus,
muss ich leider dem Vorposter recht geben.
Trotzdem, schau dir mal die Fehlermeldung genauer an:
System.ArgumentException: Stream was not writable.
in Bezug auf die folgende Zeile:
FileStream fs = new FileStream(datei, FileMode.Open, FileAccess.Read);
Such mal in der MSDN nach StreamWriter / FileStream. Dort gibts wunderschöne Beispiele.
mfg
Hellsgore
Hallo zusammen,
ich habe folgendes Problem:
ich habe eine Oberfläche, auf der zunächst eine Menuleiste und ein datagridview liegen.
In das gridview wird ein dataset geladen.
Nun möchte ich, dass sich via rechtsklick ein contentmenu öffnet.
Das klappt auch soweit, allerdings soll gleichzeitig, bzw. vorher bei dem rechtsklick die angeklickte zeile selektiert werden.
Hier muss ich vermutlich irgendwas mit nem Mousedownevent gestalten.
Schaff es aber leider nicht.
Ich hoffe, mir kann jemand helfen.
Danke
Hallo zusammen,
ich stehe vor einem riesigen Problem. Und zwar habe ich eine Klasse RingBuffer progrmmiert. Weiterhin habe ich eine Klasse, die in einem eigenen Thread Daten ließt (z.B. von einer Datei oder einer Messkarte) und diese in den Ringpuffer per Enqueue (siehe Code) schreibt. Auf der anderen Seite habe ich wiederum einen Thread, der die Daten aus dem Ringpuffer ließt (Dequeue). Das Ganze habe ich mit dem Monitor-Konzept (Beschrieben in Loos, Objektorieniertes Programmieren in C#) realisiert. Mit dem .NET Framework gibt es auch keinerlei probleme, da es die Methoden Monitor.Wait() und Moinitor.PulseAll gibt. In .NET CF gibt es diese nicht und damit scheitert dieses Konzept.
Hier meine Methoden Enqueue und Dequeue (nicht ganz vollständig)
public T Dequeue()
{
Monitor.Enter(this); //Monitor betreten (Thread-Safe!!!)
//wenn Puffer leer ist, in den Wartezustand gehen, bis count > 0 ist. Also Daten im Puffer sind)
while (this.count == 0)
{
Monitor.Wait(this);
}
// Erstes Datum aus RingBuffer entnehmen...
// hier nicht vollständig dargestellt
Monitor.PulseAll(this);
Monitor.Exit(this);
}
public void Enqueue(T value)
{
Monitor.Enter(this); //Monitor betreten (Thread-Safe!!!)
//wenn Buffer voll, gehe in den Wartezustand, bis wieder Platz da ist (Dequeue schafft Platz)
while (this.count == this.size - 1)
{
Monitor.Wait(this);
}
//Datumbei Schreibzeiger schreiben und Schreibzeiger erhöhen.
//auch dies ist hier wg. der Lesbarkeit nicht vollständig dargestellt
Monitor.PulseAll(this);
Monitor.Exit(this);
}
Die Codeausschnitte sind natürlich nicht vollständig. Ich habe das Schreiben und lesen, sowie alle Abfragen wg. der Lesbarkeit herausgelassen.
this.count enthält die Elemente, die im Puffer sind, this.size enthält die Kapazität des Ringpuffers.
Hat jemand eine Idee, wie man das ohne Monitor.Wait und PulseAll mit dem .NET Compact Framework lösen kann?
Vielen Dank
Gruß
Kramny
Dummie schrieb:
Kenne mich in C# nicht aus, aber bist du sicher, dass so was jemals möglich sein wird? Klasse Info kann ohne Elemt nicht erzeugt werden und Element ohne Info nicht...
das ist ja nicht richtig. Einen Konstruktor hab ich nicht definiert.
Wie sinnvoll das ist, ist allerdings durchaus fraglich. Ich hab das Beispiel auch nur angeführt um aufzuzeigen, dass man eine Datenstruktur so gestalten kann, dass man in beiden Richtungen suchen kann. Das ist prinzipell auch machbar. Im weiteren Text habe ich auch beschrieben, wie man sowas vermeidet.
äh, erst mal danke für eure Antworten, aber nachdem ich gerade den Code rausgesucht hatte und ihn hier einfügen wolle und noch mal gestartet hab, hat es auf einmal irgendwie funktioniert.
Werde des etz erst noch mal testen müssen!
Du nutzt das falsche Event, so kann's net funktionieren.
Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
MessageBox.Show("funzt")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.CheckBox1.CheckState = CheckState.Checked
End Sub
ja, ich weiss da habe ich auch schon nachgeschaut, die geht nicht die glaskugel.
Also ist eine selbsterstelle ... mom...
ich mach mal ein Sample fertig...
Alex
Dann such nach den Stellen an dem das Objekt verändert wird und setzte dort einen Breakpoint und dann debuggen.
Eine weitere Methode ist, dass Du aus dem zu überwachendem Dingsda ein Projektglobales Dingsda machst und des dann beim debuggen über das Überwachen Fenster anguggst.
Sebo
auch wenn du in c# einen string sendest, kommen uebers netz beim server nur bytes an. that's life - that's tcp/ip
aber die werte der bytes entsprechen den ascii codes der zeichen, die im string standen.
das heisst, du packst die ganzen bytes, die du empfaengst in ein char-array und terminierst das dingen mit \0
schon hast du einen c-string. (pass halt nur auf, dass du ASCII codes mit deinem client sendest und kein utf oder so)
blend brauchst du nicht wirklich.
vs orcas hat mit cider einen eigenen (primitiven) formsdesigner fuer wpf.
momentan ist wpf imho jedoch noch nicht so weit entwickelt wie windows forms - deshalb wuerd ich damit erstmal nur rumspielen und etwas warten, bevor ich es fuer ernste projekte einsetze.
potential hat es naemlich auf jeden fall und man kann damit schon sehr sehr feine sachen zaubern.