Laden...
B
Big Al myCSharp.de - Member
Student Mannheim Dabei seit 25.02.2006 342 Beiträge
Benutzerbeschreibung

Forenbeiträge von Big Al Ingesamt 342 Beiträge

25.03.2012 - 10:16 Uhr

Hallo,
erstmal wird es dir nicht möglich sein, direkt auf einen physischen Speicherbereich zuzugreifen, denn durch die Speichervirtualisierung hat jeder Prozess sozusagen seinen eigenen Arbeitsspeicher (Wikipedia Speichervirtualisierung)

Diese Frage kam hier auch schon öfters, aber hier mal ein paar Stichworte für dich:
ReadProcessMemory:
ReadProcessMemory (MSDN) und
ReadProcessMemory (pinvoke.net)
WriteProcessMemory:
WriteProcessMemory (MSDN) und
WriteProcessMemory (pinvoke.net)

Wenn du Stack oder DLLs im Arbeitsspeicher auslesen willst, kommt auch noch ASLR (Wikipedia ASLR) ins Spiel.
Schau dir mal Cheat Engine an. Ich glaube irgendwo gelesen zu haben, dass bei der Installation eine Art Tutorial mitinstalliert wird:
cheat engine
Viele Grüße,
Big Al

//Edit: Habe gar nicht gesehen, dass dein Beitrag im Buchforum steht, hier noch ein Buch darüber, ist aber Python, nicht C#:
Hacking mit Python

11.07.2011 - 16:29 Uhr

Hallo,
ich habe das ganze schon mit Ellipsen probiert, deren Radius ich animiert habe. Aber auch hier das Problem, dass das "Bild" dann immer an das umgebende Control angepasst wird und somit eigentlich nur die mittlere, nicht animierte Ellipse kleiner wird, weil ja das Image-Control nicht wachsen kann.
Big Al

11.07.2011 - 16:08 Uhr

Hallo,
ich versuche mich gerade an einer Animation eines WIFI Signals, die unanimiert ungefähr so wie auf dem Bild im Anhang aussieht. Ich habe das ganze in ein Image und eingebettetem GeometryDrawing eingebaut, doch wenn ich dann die einzelnen "Wellen" animiere verändert sich nur das Verhältnis der Wellen zueinander, anstatt zusammen größer zu werden, so wie ich das vorhabe. Wie kann ich so etwas am besten umsetzen? Ist GeometryDrawing überhaupt der richtige Ansatz?
Viele Grüße,
Big Al

06.07.2011 - 11:16 Uhr

Hallo Levitas,
vielleicht hilft dir die NAudio Bibliothek? Allerdings kann nicht jeder Treiber den Output ausgeben. Mein Treiber kann das z.B. nicht.
Big Al

22.05.2011 - 10:55 Uhr

Hallo winsharp93,
Respekt, das ist eine ziemlich clevere Lösung! So werde ich das benutzen.
Big Al

21.05.2011 - 14:43 Uhr

Hallo gfoidl,
ich denke nicht, dass ein Storyboard die Lösung für dieses Problem ist, denn es hat keinen Zugriff auf den alten Wert.
Hier noch einmal das Szenario:
Ich habe eine Button, dessen Width-Property an ein DependencyProperty des ViewModels gebunden ist.
Nun ändert sich das Property im ViewModel und das wird auch gleich vom Button übernommen. Jetzt kann ich zwar über einen DataTrigger bei einer Änderung eine Animation abspielen, aber diese kennt ja nur die aktuelle, also neue, Breite des Buttons. Wie soll ich denn nun eine Animation so abspielen, dass der Button die Breite animiert?
Soll ich hier ganz auf das Binding verzichten und nur den DataTrigger benutzen, sodass die Werte von der Animation an die des ViewModels angepasst werden?
Big Al

21.05.2011 - 13:14 Uhr

Hallo,
was ich mich schon oft gefragt und oft gegoogelt habe, wofür ich aber noch keine Lösung gefunden habe, ist folgendes Problem:
Wenn ich eine Eigenschaft eines Controls, z.B. die Breite eines Buttons, an ein DependencyProperty in meinem ViewModel o.ä. binde und sich der Wert im ViewModel ändert, dann wird die Änderung selbstverständlich direkt zu dem Button durchgereicht und dieser bekommt die neue Breite. Wie kann ich aber diese Änderung animieren, sodass der Button von der alten Größe auf die neue wächst bzw. schrumpft? Man findet im Internet nur Beispiele, bei denen zwar eine Animation abläuft, diese aber nicht den alten Wert kennt.
Ein Beispiel hier von Josh Smith:
Orchestrating Animated Transitions between View and ViewModel
Er benutzt aber nur eine Fade-In und Fade-Out Animation für die Transitions. Wie sieht es mit konkreten Start- und Endwerten aus? Kennt da jemand eine gute Lösung? Vielleicht ein zwischengeschaltetes Objekt, welches beide Werte enthält, an die man dann die To und From Properties der Animation binden kann?
Vielen Dank,
Big Al

//Edit: Oder wäre es vielleicht der richtige Weg, den Wert im ViewModel zu animieren? Gehören Animationen da rein?
//Edit 2: Hier ist noch eine Lösung von Josh Twist, die mir aber nicht so gut gefällt, da man jedes gebundene Control noch einmal in ein UserControl verpacken muss:
Animating when data changes Part 2

16.05.2011 - 21:33 Uhr

Hallo,
vielen Dank Herbivore, so wie du es beschrieben hast funktioniert es bis jetzt ohne Probleme. Ich denke nicht, dass der Fehler noch auftreten wird.
Vielen Dank dafür!
Big Al

16.05.2011 - 12:36 Uhr

Hallo,
ich habe alle Events, die der Recognizer hat, abonniert und keines wird mehr gefeuert, wenn der Fehler auftritt. Aber wo muss ich das KeepAlive denn einsetzen? Es sollte ja an das Ende des Codeblocks, in dem es benötigt wird. Da die Erkennung aber dauerhaft laufen soll gibt es diesen Punkt doch gar nicht so. Ich erstelle den Recognizer, starte per RecognizeAsync den "Erkennungsthread" und warte auf die Events.
Wäre die korrekte Lösung vielleicht, die synchrone Recognize() Methode in einem Thread zu benutzen und beim feuern des RecognitionCompleted-Events wieder Recognize() aufzurufen?
Big Al

16.05.2011 - 09:49 Uhr

Hallo Herbivore,
ich meinte den Thread, der durch RecognizeAsync gestartet wurde. BabbleTimeout, InitialSilenceTimeout und EndSilenceTimeout hatte ich testweise auch auf 9 Tage gesetzt, aber das hatte nichts geholfen. Ich werden mal die Sache mit dem Garbage Collector verfolgen.
Danke sehr!
Big Al

15.05.2011 - 19:51 Uhr

Hallo Mycsharpler,
Viele werden noch nicht mit der Spracherkennung aus dem System.Speech.Recognition Namespace herumgespielt haben, aber vielleicht habe ich ja Glück und jemand kann mir helfen.
Ich benutze in meiner WPF Anwendung die Klasse SpeechRecognitionEngine um Sprache zu erkennen. Das funktioniert auch meistens einige Sekunden lang super. Nach zufälliger Zeit, manchmal auch sofort, beendet sich aber der Thread der Engine selbst, ohne das über irgendein Event mitzuteilen.
Wenn ich die Klasse SpeechRecognizer benutze, wird oben das Windows 7 Spracheingabefenster angezeigt, das auch immer den zuletzt gesprochenen Text zeigt. Wenn der Thread beendet ist wird dieser Text auch noch richtig angezeigt, aber keines der Events der Klasse feuert mehr.

Folgendermaßen benutze ich die Klasse:


SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine();
recognizer.SetInputToDefaultAudioDevice();

//Grammatik laden ...

recognizer.RecognizeAsync(RecognizeMode.Multiple);

In dem SpeechRecognized-Event wird einfach nur eine Action, die in einem Dictionary dem zu erkennenden Text zugeordnet ist, ausgeführt:


void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            Action<string> a;
            if (dict.TryGetValue(e.Result.Text, out a) && a != null)
                a(e.Result.Text);
        }

Das Ausgabefenster zeigt auch immer folgende Meldung an:> Fehlermeldung:

Information: 0 : SAPI does not implement phonetic alphabet selection.

Die kommt allerdings immer, auch wenn die Eingabe noch funktioniert.

Ich habe schon stundenlang nach einer Lösung gegoogelt und würde mich wirklich freuen, wenn mir hier jemand weiterhelfen könnte.
Viele Grüße,
Big Al

08.03.2011 - 20:51 Uhr

Ihr werdet es nicht glauben, aber das Problem ist ein WindowsFormsHost mit eingebautem WinForms Control, welches wiederum ein FlashPlayer Control enthält. Warum das passier kann ich noch immer nicht sagen, aber wenn ich das Control rauslasse funktioniert es. Sehr seltsames Verhalten...

Vielleicht weiß ja einer eine Antwort auf dieses Mysterium, das würde mich sehr interessieren. Erst einmal nehme ich jetzt den FlashPlayer raus.

Big Al

08.03.2011 - 19:44 Uhr

Hallo,
Snoop stürzt bei mir leider immer ab einer bestimmten Stelle im TreeView ab, deshalb konnte ich das Control nicht näher analysieren. Ich werde wohl mal eine extra Anwendung schreiben, die das Problem ohne große Controls drumherum veranschaulicht. Vielleicht funktioniert Snoop ja dann. Ich habe auch versucht, den TextBlock in VisualBrush an den äußeren zu binden und bin auf exakt dasselbe Ergebnis wie vorher gekommen. Wenn sich durch Änderungen in der gebundenen Klasse der Wert der ProgressBar ändert, ändert sich auch der Wert des ersten TextBlocks, nicht aber der des zweiten.
Zur weiteren Info: Der Style liegt in einer XAML-Ressourcen-Datei, aber das dürfte eigentlich keine Rolle spielen, denn das Binding des ersten TextBlocks funktioniert ja.
Big Al

//Edit: Es wird noch komischer: Ich habe den Style 1 zu 1 in ein neues Testprojekt übertragen und dort eine ProgressBar mit dem Style versehen und ihren Wert an einen Slider gebunden. Hier funktioniert es, in dem anderen Projekt nicht. Beide haben als Framework-Target 4.0.

08.03.2011 - 14:54 Uhr

Hi,
das muss ich gleich ausprobieren, wenn ich zu Hause bin. Von Snoop habe ich noch nie was gehört. Werde ich auch mal ausprobieren. Melde mich, wenn ich mehr weiß.
Danke erstmal,
Big Al

07.03.2011 - 22:01 Uhr

Hallo,
ich versuche mich gerade an einer ProgressBar, die fünf Sterne statt des normalen Balkens anzeigt. Ich weiß, dass es da schon einige Lösungen gibt, aber ich dachte mir, dass meine eigentlich auch funktionieren müsste. Nur leider tritt hier ein komisches Phänomen auf. Hier erst einmal das XAML für den ProgressBar-Style. Da ich aber nur mein Problem demonstrieren möchte habe ich in PathData ein einfaches Rechteck statt der Sterne und im VisualBrush statt einer ProgressBar einen TextBlock drin. Außerdem ist im Grid noch ein weiterer TextBlock zur Veranschaulichung des Problems.


    <Style TargetType="ProgressBar" x:Key="starProgressBarStyle">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ProgressBar">
                    <Grid>
                        <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value, Mode=OneWay}" Width="100"/>
                        <Viewbox>
                            <Path>
                                <Path.Fill>
                                <VisualBrush Stretch="Fill">
                                    <VisualBrush.Visual>
                                        <TextBlock Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Value, Mode=OneWay}" Width="100"/>
                                    </VisualBrush.Visual>
                                </VisualBrush>
                                </Path.Fill>
                                <Path.Data>
                                    <PathGeometry>
                                    <PathFigure StartPoint="0,0" IsClosed="True">
                                        <LineSegment Point="100,0"/>
                                        <LineSegment Point="100,100"/>
                                        <LineSegment Point="0,100"/>
                                    </PathFigure>
                                    </PathGeometry>
                                </Path.Data>
                            </Path>
                    </Viewbox>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Mein Problem ist nun, dass trotz exakt gleichem Code die beiden TextBlocks unterschiedliche Werte haben. Der TextBlock im VisualBrush wird nämlich bei Änderungen des Properties, an das er gebunden ist nicht geupdated und zeigt immer den ersten Wert. Der TextBlock im Grid zeigt allerdings immer den richtigen Wert an. Dieses seltsame Verhalten bereitet mir gerade einiges Kopfzerbrechen. Kennt jemand den Grund dafür?

Big Al

05.03.2011 - 19:44 Uhr

Hi,
Ich würde dir außerdem noch empfehlen, die Eingabe zu prüfen anstatt auf die Exception zu warten.
Grüße,
Big Al

27.01.2011 - 10:04 Uhr

Hi,
mit XNA kann man in C# Spiele programmieren.
XNA Game Studio 4.0

Big Al

27.12.2010 - 14:38 Uhr

Hi,
also wenn es nur ähnlich sein soll, würde ich das so machen:
Ein Grid mit 2 Spalten und für jeden Sender eine Zeile. In die erste Spalte kommt immer der Sendername und in die zweite ein ScrollViewer, in dem dann ein StackPanel mit Orientation=Horizontal steckt. Dann hast du aber natürlich ScrollBars und keinen Button, mit dem du das Programm scrollst. Du könntest also noch eine 3. Spalte einfügen und dort den Scroll-Button unterbringen.
Wenn die Anzahl der Programme variabel ist, kannst du statt des Grids auch ein StackPanel nehmen und in dieses viele kleine Grids mit einer Zeile und 2 Spalten stecken.
Viele Grüße,
Big Al

//Edit: Bild angehängt (Die Pfeile hinten sind optional)

11.12.2010 - 19:34 Uhr

Hi,
dass Windows nur die RecentFiles selbst einträgt, ist mir klar. Allerdings sind ja Links, die ich in die JumpList eintrage, auch nach dem Beenden des Programms noch in der Liste. Erst wenn ich das Programm neu starte wird die Liste geleert, weil sie durch die im XAML definierte Standard-JumpList ersetzt wird. Ich würde nun gerne die Links, die schon in der Liste sind, in die neue JumpList übernehmen.
Big Al

11.12.2010 - 17:49 Uhr

Hi,
danke für die Antwort! Das Entfernen funktioniert jetzt, ich hatte 2 Anwendungen vertauscht.
Allerdings werden zwar Elemente, die ich in die JumpList lege auch nach dem Programm-Ende angezeigt, aber diese werden gelöscht, wenn ich das Programm neu starte und die Standard-JumpList die alte überschreibt. Muss man also bei jedem Programmstart die Jumplist neu befüllen oder kann man die Werte irgendwie übernehmen?
Viele Grüße,
Big Al

11.12.2010 - 16:54 Uhr

Hallo,
wie schon im Titel gesagt, gibt ein Aufruf von JumpList.GetJumpList(App.Current) in meiner Anwendung null zurück, wenn ich das Programm aufrufe. Ich setze dann zwar einfach eine neue Jumplist über JumpList.SetJumpList und diese wird auch von GetJumpList zurückgegeben. Starte ich die Anwendung allerdings neu, kommt wieder null zurück. Außerdem scheint die Apply Methode nicht zu funktionieren, denn das Löschen eines Items funktioniert auch nicht. Hier mein Code zum hinzufügen eines Items:


JumpList jl = JumpList.GetJumpList(App.Current);

if (jl == null)
     jl = new System.Windows.Shell.JumpList();

System.Windows.Shell.JumpTask t = new System.Windows.Shell.JumpTask();
t.ApplicationPath = path;
t.IconResourcePath = path;
t.Title = name;
t.CustomCategory = "Links";
t.Description = description;

jl.JumpItems.Add(t);

JumpList.SetJumpList(App.Current, jl);
jl.Apply();

Und hier, wie ich versuche, ein Item zu entfernen:


JumpList jl = JumpList.GetJumpList(App.Current);
if (jl == null)
     return;

JumpItem toRemove = null;
foreach (JumpItem i in jl.JumpItems)
{
      JumpTask t = i as JumpTask;
      if (t != null && t.ApplicationPath == path)
      {
              toRemove = i;
              break;
       }
}
if (toRemove != null)
{
        jl.JumpItems.Remove(toRemove);
        jl.Apply();
}

In allen Beispielen, die ich bisher gesehen habe, wird gar nicht geprüft, ob JumpList.GetJumpList(App.Current) null zurückgibt, es scheint also eigentlich immer was kommen zu müssen. Kann mir jemand sagen, was ich falsch mache?
Vielen Dank,
Big Al

//edit: Ach ja, hier noch der Link zu MSDN: Jumplist Klasse

30.10.2010 - 23:22 Uhr

Hi André,
ich habe mir das Tool mal angeschaut. Ich finde die Idee super, aber so ganz funktioniert das bei mir noch nicht.
Ich denke mal, dass der rechte Schieberegler für den Zoom ist, oder? Bei mir hat sich allerdings nichts getan, als ich ihn benutzt habe. Das Beispiel mit der Uhr habe ich heruntergeladen und versucht zu laden, aber es ist nichts passiert.
Bei der Navigation fände ich es schöner, wenn du die Regler anpasst. Wenn ich einen Regler nach rechts ziehe, bewegt sich die "Kamera" nach links, das ist irgendwie irritierend. Außerdem fände ich es schöner, wenn ein Element schon beim OnMouseDown den grünen Auswahlrahmen bekommt, aber das ist nur Kosmetik. Schon störender ist, dass das SelectionTool mehrere Elemente auswählt, wenn man sie hintereinander anklickt. Das sollte so nur sein, wenn man beim Klicken Strg gedrückt hält. Wie wäre es außerdem, wenn du die Tool-Buttons zu RadioBoxen mit Button-Stil machst? So könnte man schneller sehen, welches Tool gerade ausgewählt ist.
Ich habe es auch nicht hinbekommen, auf dem BCD irgendetwas anzeigen zu lassen, wie füge ich denn eine "Stromquelle" hinzu? Aus deinem Bild schließe ich, dass das die Buttons sind, aber wie ändere ich deren Farbe auf Orange, was wohl "An" bedeuten soll?
Wenn ich die RedstoneSimulator.exe starte, passiert gar nichts. Wofür ist die da?
Vielleicht postest du hier mal eine kurze Anleitung, damit man das auch versteht. Wenns funktioniert, dann ist das ein super Programm für die Rechnertechnik-Hausaufgaben 😉
Viele Grüße,
Big Al

19.09.2010 - 17:52 Uhr

Hi,
Sorry das ich mich erst so spät melde, ich hatte den Thread aus den Augen verloren. Ich denke dieser Authentifizierungsfehler muss an dem Server liegen, denn bei mir funktioniert es so:


static void Main(string[] args)
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/digest_auth_test.php");
            request.Credentials = new NetworkCredential("Alexander", "123456");
            request.PreAuthenticate = true;

            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            using (StreamReader s = new StreamReader(response.GetResponseStream()))
            {
                Console.Write(s.ReadToEnd());
            }
            Console.ReadKey();
        }

Bist du dir sicher, dass dein Passwort und Username richtig sind?
Big Al

29.08.2010 - 14:47 Uhr

Hi,
also bei mir war das mit Google das erste Suchergebnis:
http://www.stickler.de/code-snippets.aspx?id=6
Vielleicht hilft das ja weiter.
Big Al

19.08.2010 - 09:39 Uhr

Hi,
ich habe es jetzt so gelöst, dass ich auf das MouseUp Event horche. Dann starte ich einen Timer und wenn innerhalb kurzer Zeit wieder gedrückt wird, ist es ein Doppelklick und ich öffne den Expander. Da es MouseUp ist, wird dann kein anderes Item ausgewählt.
Big Al

17.08.2010 - 15:36 Uhr

Hallo Talla,
der SelectionMode ist Single, allerdings wird ja auch immer nur ein Item ausgewählt, nur halt das falsche.
Big Al

16.08.2010 - 19:53 Uhr

Hallo,
Ich habe ein kleines Problem mit dem WPF ListView. Das wählt ja auch Items aus, wenn man auf einem Item die Maus gedrückt hält und sie dann über ein anderes Item bewegt.
Im Grund würde es schon reichen zu wissen, wie man dieses Verhalten deaktiviert, aber ich erkläre mal weiter, falls das nicht geht.
Ich habe also ein ListView und wenn ich auf ein Item doppelklicke, öffnet sich auf der rechten Seite ein Expander. Das ListView wird also kleiner und die Position der Items verschiebt sich. Nun ist in dem kurzen Moment nach dem Doppelklick die Maustaste noch gedrückt und somit wird dann das Item ausgewählt, das nun an der Stelle ist, an der das eigentlich auszuwählende Item war.
Gibt es hier eine elegante Lösung, das zu vermeiden?
Vielen Dank,
Big Al

31.07.2010 - 18:19 Uhr

Hallo,
ich versuche gerade zum ersten Mal, neben Debug und Release weitere Konfigurationen für ein VS 2010 Projekt zu benutzen. Allerdings kann ich in den Projekteigenschaften unter "Anwendung" die Konfiguration, für die ich Einstellungen ändern möchte, nicht auswählen. Dort steht "Nicht zutr." und die DropDown-Box ist ausgegraut. Wie das aussieht seht ihr im Anhang.
Unter "Erstellen" kann ich die Konfiguration übrigens ändern.
Mein Ziel ist es, jeweils eine Konfiguration für eine Kompilierung fürs Framework 4.0 und 3.5 SP1 zu haben. Ist das überhaupt der richtige Weg?
Vielen Dank schonmal,
Big Al

10.06.2010 - 08:18 Uhr

Hallo,
ich habe das Problem gelöst. Es lag daran, dass der Dispatcher auch in einem anderen Thread als dem GUI Thread erzeugt wurde. Da liefert Dispatcher.CurrentDispatcher natürliche einen falschen.
Vielen Dank für die Hilfe,
Big Al

09.06.2010 - 20:43 Uhr

Hi,
das funktioniert auch nicht, da muss es wohl am Code drumherum liegen. Ich lade im Hintergrund Informationen, die in eine Collection kommen. Ein ViewModel greift dann, wenn der Ladevorgang abgeschlossen ist, auf die Collection zu und erstellt ViewModels der geladenen Items und schreibt sie in eine eigene ObservableCollection.
Hier mal ein bisschen Code der Methode, die nach dem Laden aufgerufen wird:


protected override void OnInformationLoadingCompleted(IAsyncResult res)
        {
            (res.AsyncState as Action).EndInvoke(res);

            //Hier kommt der Teil, der abschmiert:
            foreach (Appeal.Model.Base.Comment c in ((OnlineApp)Model).GetComments())
            {
                CommentViewModel vm = new CommentViewModel(c);
                Comments.Add(vm);
            }

            infoLoaded = true;
       }
09.06.2010 - 20:04 Uhr

Hallo Herbivore,
mit der CP Version hab ich es noch nicht probiert, ich werde meine Erfahrungen hier posten.
Grüße,
Big Al

09.06.2010 - 17:01 Uhr

Hallo Herbivore,
ich benutze das ganze in einer WPF Anwendung, in der im Hintergrund Daten geladen werden. Hier soll dann auch die ThreadSafeObservableCollection gefüllt werden. Wenn währenddessen die GUI die Collection über DataBinding beansprucht, muss das ganze ja synchronisiert werden. Ein bisschen stutzig war ich bei der Klasse auch, ich musste schon eine "Parameter count mismatch" Exception beheben und das viele CheckAccess kam mir auch seltsam vor. Ich habe noch eine Implementierung bei CodeProject gefunden. Die benutzt Lambda-Ausdrücke statt der anonymen Methoden.
Dass die Methode InsertItemImpl nicht aufgerufen wird habe ich daraus geschlossen, dass ein Breakpoint darin nicht die Ausführung gestoppt hat. Außerdem war das "geinsertete" Item nach dem Aufruf von InsertItem nicht in der Collection.
Big Al

09.06.2010 - 11:39 Uhr

Hallo,
ich verstehe nicht ganz, warum du den string als Parameter übergibst, wenn du ihn doch eh in deiner Klasse als Member hast. Die Methode hat doch direkten Zugriff darauf, oder?
Falls nicht könntest du auch eine Struktur mit den Properties Dateiname und DateiOffen mit return zurückgeben.
Big Al

09.06.2010 - 11:29 Uhr

Hallo,
ich habe eine ThreadSafeObservableCollection ähnlich dieser hier: http://blogs.microsoft.co.il/blogs/tamir/archive/2007/04/22/Thread-safe-observable-collection.aspx
Bei der InsertItem Methode scheint es aber ein Problem zu geben, denn diese Zeile:

dispatcher.Invoke(DispatcherPriority.DataBind, (SendOrPostCallback)delegate { InsertItemImpl(args); }, args);

bricht einfach ab und führt den Aufruf

InsertItemImpl(args);

gar nicht mehr aus. Da ich mich mit dem Dispatcher nicht übermäßig gut auskenne, würde es mich freuen, wenn mir jemand erklären könnte, woran das liegt. Vielleicht falsche Parameter? Hier noch einmal der Code für InsertItem und InsertItemImpl:


protected override void InsertItem(int index, T item)
        {
            if (dispatcher.CheckAccess())
            {
                if (index > this.Count)
                    return;
                LockCookie lock_cookie = rw_lock.UpgradeToWriterLock(-1);
                base.InsertItem(index, item);
                rw_lock.DowngradeFromWriterLock(ref lock_cookie);
            }
            else
            {
                object[] args = new object[] { index, item };
                dispatcher.Invoke(DispatcherPriority.DataBind, (SendOrPostCallback)delegate { InsertItemImpl(args); }, args);//Hier wird abgebrochen
            }
        }

        void InsertItemImpl(object[] args)
        {
            if (dispatcher.CheckAccess())
            {
                InsertItem((int)args[0], (T)args[1]);
            }
            else
            {
                dispatcher.Invoke(DispatcherPriority.DataBind, (SendOrPostCallback)delegate { InsertItemImpl(args); }, null);
            }

        }

Vielen Dank,
Big Al

09.05.2010 - 16:17 Uhr

Hi,
leider haben die meisten Mütter keine große Affinität zu schönem und nützlichem Programmcode. Oder könntest du deine Mutter mit, sagen wir mal, threadübergreifendem Zugriff auf die GUI beeindrucken? Prinzipiell ja eine schöne Idee, wenn es eine bessere Zielgruppe wäre...
Big Al

08.05.2010 - 19:46 Uhr

Hallo winsharp93,
du hast schon recht, es passt besser ins ViewModel, aber da ich immer das gleiche Vorschaubild für alle Objekte verwende, die in dem ListView sind und es außerdem ein viel geringerer Aufwand sein müsste, das PriorityBinding zu benutzen, würde ich es lieber damit machen. Außerdem interessiert mich einfach, warum das nicht funktioniert, denn komisch ist das ja schon. Vor allem in einem ersten Test ist es mit PriorityBinding viel leichter zu implementieren (dachte ich zumindest, bis dieses Problem auftauchte 😄)
Also, wenn jemand weiß woran es liegt: Immer her damit. Wenn nicht mach ich es wie winsharp93 es beschrieben hat.
Danke für die Hilfe!
Big Al

08.05.2010 - 13:34 Uhr

Hallo,
Ich setze beim 2. Binding nur die Source, weil ich in den Resourcen ein DrawingImage habe, das den Platzhalter darstellt. Ich binde also den Platzhalter nicht an ein Objekt. Gegen einen String zu binden hat doch beim ImageDrawing keinen Sinn, wie meinst du das?
Big Al

08.05.2010 - 11:05 Uhr

Hallo CSL,
Nein, es dauert nicht gleich lange. Gegen was ich als zweites binde dürfte doch egal sein, denn trotzdem müsste irgendwann das erste Binding einspringen. Außerdem funktioniert Binding 2 ja, wenn ich Binding 1 weglasse. Ich werde es aber trotzdem mal testen, nur um sicher zu gehen.
Big Al

//edit:
Hab es ausprobiert, auch wenn ich Binding 2 direkt fest an ein Bild von der Festplatte binde, wird dieses nicht angezeigt. Was vielleicht erwähnenswert ist: Wenn ich eine nicht existierende Datei angebe, wird keine Exception geworfen, das Binding wird also scheinbar gar nicht ausgewertet.

08.05.2010 - 10:13 Uhr

Guten Morgen mycsharpler,
Ich habe ein Problem mit dem PriorityBinding von WPF. Und zwar habe ich ein ListView, dessen Items wieder über Datenbindung Bilder enthalten. Diese Bilder habe ich jetzt mal mit Absicht groß gemacht, um das PriorityBinding zu testen. Folgendermaßen sieht mein XAML aus:


 <ImageBrush Stretch="UniformToFill">
                            <ImageBrush.ImageSource>
                                <PriorityBinding>
<!--Binding 1 (langsam)-->
                                    <Binding IsAsync="True" >
                                        <Binding.Source>
                                            <DrawingImage>
                                                <DrawingImage.Drawing>
                                                    <ImageDrawing ImageSource="{Binding Path=ImagePath}" Rect="0,0,100,100" />
                                                </DrawingImage.Drawing>
                                            </DrawingImage>
                                        </Binding.Source>
                                    </Binding>
<!--Binding 2 (schnell)-->
                                    <Binding Source="{StaticResource imgPlaceholder}"/>
                                </PriorityBinding>
                            </ImageBrush.ImageSource>
                        </ImageBrush>

Wie ihr seht benutze ich ein PriorityBinding, um Platzhalter anzeigen zu lassen, während das richtige Bild geladen wird. Leider macht das Probleme, die Items werden immer leer angezeigt. Wenn ich allerdings die ImageSource-Eigenschaft des Brushes direkt an den ImagePath binde und kein PriorityBinding verwende, funktioniert es, nur halt asynchron. Wenn ich das erste, asynchrone Binding rausschmeisse, wird mein Platzhalter angezeigt und wenn ich nur das Binding zum Platzhalter herausnehme wird auch gar nichts angezeigt. Woran könnte das liegen und wir kann ch das Problem lösen?
Vielen Dank im voraus,
Big Al

28.04.2010 - 13:20 Uhr

Danke Zommi,
das ist genau was ich brauche! Die GetModuleInformation-Methode hab ich auch schonmal gesehen aber bin wohl leider zu schnell abgeschweift. Toll, dass ich in dem C# Forum auch so qualifizierte Hilfe zu C und C++ finde 😄

28.04.2010 - 08:29 Uhr

Hi Jack30lena,
vielen Dank für die Hilfe, deine Antwort hat mich auch auf diese Seite geführt: http://codeguru.earthweb.com/forum/showthread.php?t=479922
Hier wird das ganze wohl über die Process Status API (Psapi) gemacht. Das werde ich mir noch einmal anschauen.
Big Al

27.04.2010 - 22:43 Uhr

Hallo Forum,
ich versuche gerade, wie in diesem Thread, eine Funktion in einem anderen Prozess aufzurufen. Das habe ich in C# geschafft und auch in C konnte ich die Funktion schon aufrufen. Allerdings gibt es noch ein Problem namens Randomized Base Address (Project -> Properties -> Linker -> Advanced), die standardmäßig auf Yes steht. Das bedeutet, dass die Speicheradressen für Funktionen nicht fest sind, sondern sich bei jedem Programmstart ändern können. Ich habe allerdings festgestellt, dass der "Abstand" einer Funktion in einem Prozess zu dessen Main-Funktion immer gleich ist. So war es zumindest bei mir. Auch nach mehrmaligem Aufruf war

(int)&GetANiceNumber - (int)&_tmain

immer -64.
Naja, in C# gibt es die tolle Klasse ProcessModule mit der Eigenschaft EntryPointAddress, die die gewünschte Adresse zurückgibt.
Lange Rede, kurzer Sinn, wie bekomme ich die Adresse in C raus? Wenn das in C# geht, muss das doch auch in C gehen, oder?
Vielen Dank im Voraus für etwaige Antworten,
Big Al

26.04.2010 - 14:09 Uhr

Hi elasius,
Also ich denke, dass du mit mehr Rechenaufwand leben musst, wenn du eine Zoomfunktion haben willst. Die PictureBox zu vergrößern und zu verkleinern finde ich nicht gerade toll. Hast du damals vielleicht ein paar Disposes vergessen?
Big Al

26.04.2010 - 13:26 Uhr

Hi,

Um die Zoom-Funktionalität zu erreichen, scaliere ich die PictureBox einfach bei Zoom in um den Faktor 1.2 und zum herauszoomen um den Faktor 0.8.

Heißt das, du änderst die Größe der PictureBox? Du könntest dir ein eigenes Control schreiben und in der OnPaint Methode zoomen. Ich denke, dass es da weniger Probleme geben würde. Für ein gaaaaanz großes Bild könnte man dieses in mehrere Teile zerlegen und die Teile nur laden, wenn sie innerhalb des Sichtfeldes sind. Aber da du ja ungern selbst zeichnest, ist das vielleicht auch nicht das Richtige, oder?
Grüße,
Big Al

16.04.2010 - 10:27 Uhr

Hallo Christel,
warum musst du denn überhaupt den Umweg über das Serialisieren gehen? Warum übergibst du die Liste der Objekte nicht direkt?
Viele Grüße,
Big Al

29.03.2010 - 15:26 Uhr

Hallo,
ich habe die Lösung gefunden. Ich prüfe jetzt statt mit str == string.Empty mit !sr.EndOfStream.
Damit funktioniert es ohne Probleme.
Viele Grüße,
Big Al

29.03.2010 - 15:18 Uhr

Hey,
danke für die Antwort, ich werd gleich mal checken, wie ich noch überprüfen kann, ob der Stream zu Ende ist. Komisch ist es aber trotzdem, dass der Stream dann gleich disposed wird, wenn er "leergelesen" ist. Mit string.Split() werde ich es machen, wenn ich es anders nicht hinbekomme.
Danke nochmal,
Big Al

28.03.2010 - 15:04 Uhr

Hallo,
ich versuche gerade, eine FTP-Verbindung aufzubauen und die Dateien im Hauptverzeichnis zu lesen. Mit folgender Methode funktioniert das auch ohne Probleme:

        static void Main(string[] args)
        {
            FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://ftp.heise.de");
            request.Timeout = 3000;
            request.Credentials = new NetworkCredential("anonymous", "");
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            {
                Console.WriteLine(response.StatusDescription);
                Stream s = response.GetResponseStream();

                using (StreamReader sr = new StreamReader(s))
                {
                    string str = sr.ReadToEnd();
                    Console.WriteLine(str);
                }
            }
            Console.ReadKey();
        }

Wenn ich nun aber die Dateien und Verzeichnisse folgendermaßen auslesen möchte:

 static void Main(string[] args)
        {
            FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://ftp.heise.de");
            request.Timeout = 3000;
            request.Credentials = new NetworkCredential("anonymous", "");
            request.Method = WebRequestMethods.Ftp.ListDirectory;
            using (FtpWebResponse response = (FtpWebResponse)request.GetResponse())
            {
                Console.WriteLine(response.StatusDescription);
                using (StreamReader sr = new StreamReader(response.GetResponseStream()))
                {
                    string str = sr.ReadLine();
                    while (str != string.Empty)
                    {
                        Console.WriteLine(str);
                        str = sr.ReadLine();
                    }
                }
            }
            Console.ReadKey();
        }

dann bekomme ich folgende Exception bei

str = sr.ReadLine();

:
Cannot access a disposed object.
Object name: 'System.Net.Sockets.NetworkStream'.
Dieser Fehler ist auch bei StackOverflow beschrieben, da lag es aber daran, dass der Frager den Stream des falschen Requests auslesen wollte.
Hat jemand eine Ahnung, woran es bei mir liegen kann, dass der Stream einfach disposed wird, während ich noch beim Lesen bin?
Vielen Dank,
Big Al

//edit: Übrigens werden mir, bevor die Exception kommt, noch alle Dateien und Verzeichnisse in der Console ausgegeben.

11.03.2010 - 12:50 Uhr

Wie wäre es mit einem Balken, wie bei Windows-Fenstern?