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 vbtricks
Thema: Treiber- und Softwareprobleme bei 64bit-Vista?
Am im Forum: Smalltalk

Zitat von edsplash
bei der Gelegenheit habe ich direkt mal eine Frage an die Vista-User: Hat jemand von Euch Vista 64 installiert und hat dabei keine Probleme mit Treibern oder Software ?


Werde dann heut Abend noch meinen Desktop uppen ;)

Läuft bei mir E6550 @ P35, 6GB DDR 2, 8500GT wunderbar.
Zitat von Thomas Wüst
Sollen wir jetzt mal Lachen?

Kennt jemand wirklich einen, der Vista hat und dabei keine Probleme?

Grübel
Sollen wir über derart unqualifizierte Kommentare lachen? Wenn dann bitte begründen. Aber nicht hier, hier geht es um Desktopscreenshots ;)

Thema: WPF auf der Powerwall?
Am im Forum: GUI: WPF und XAML

Danke für den Artikel. Dabei fällt mir ein, ich habe noch nicht von den Erfahrungen am Wochenende mit WPF auf mehreren GPUs berichtet.

Konfiguration:
NVIDIA 630a Chipsatz/7050 integrierte Graka
NVIDIA 8500GT
Athlon X2 5200+
2GB DDR2
Win XP SP 2, .NET 3.5 SP 1

Meine Testanwendung hatte ein Fenster, dass recht GPU-lastig ist und eines, das eine simple Animation anzeigt (Quadrat wird auf dem Bildschirm verschoben), für den Smooth-Test.

Dann habe ich die Anwendung zwei mal gestartet, bei der einen das aufwändige und bei der anderen die simple Animation geöffnet.

Waren beide Anwendungen auf derselben Grafikkarte, haben beide Fenster geruckelt (egal, auf welcher Grafikkarte). Verschob ich dann das GPU-lastige Fenster auf den Bereich der anderen Grafikkarte, wurde die simple Animation deutlich flüssiger, ruckelte im Vergleich zur Situation, wenn nur das simple Fenster auf dem System lief, aber noch deutlich.

Also richtig entkoppelt waren die separaten Anwendungen nicht. Engpass könnte natürlich noch die CPU gewesen sein, die lief mit beiden Anwendungen aber um die 70% Auslastung, was für die simple Animation noch locker gereicht hätte, sie komplett flüssig anzuzeigen.

Evtl. ist die Situation unter Vista besser, in der MSDN liest es sich an einigen Stellen, dass das neue Treibermodell deutliche Vorteile bringt. Aber wenn ich Vista auf dem Rechner installiert hätte, wäre meine Schwester wenig begeistert gewesen.

Inzwischen hab ich die Konfiguration wieder auseinander gebaut. Es macht denk ich mehr Sinn, das ganze mit zwei richtigen Grakas und einer Testsoftware, die den späteren Anforderungen entspricht, zu testen.

Nichtsdestotrotz hänge ich hier noch den Code meiner Testanwendung an.

Über Verbesserungsvorschläge und Kritik freue ich mich aber weiterhin.

Thema: WPF auf der Powerwall?
Am im Forum: GUI: WPF und XAML

Da ich mir vor der eigentlichen Entscheidung Direct3D vs. WPF Gedanken mache, habe ich noch keinen Zugriff auf die Zielsysteme. Ich kann nur probieren, meine PCI-Express-Karte (8500GT) in ein Board mit Chipsatzgrafik (7050) einzubauen.

Wie bekomme ich aber raus, wie beschäftigt die beiden GPUs sind (oder in WPF, auf welcher Karte ein Fenster gerendert wird)? Nicht, dass die eine GPU alles rendert und dann z.B. das Resultat einfach auf die andere Graka kopiert und dort angezeigt wird?

Über Temperatur kann ich nicht gehen, da die Chipsatzgrafik keine Temperaturwerte ausgibt. Die Applikation zum "Grillen" hätte ich schon.

Thema: WPF auf der Powerwall?
Am im Forum: GUI: WPF und XAML

Danke für den Link. Zumindest hat mir das ein paar Hinweise gegeben, wo die Performance-Probleme von WPF liegen.

DirectX 9.0 unterstützt in der Tat mehrere GPUs, bloß sagt das über die WPF leider nichts aus, denn die WPF muss keinesfalls den vollen Funktionsumfang von Direct3D nutzen.

Leider habe ich hier keine zweite Grafikkarte, die über Tier 0 herauskäme, sonst hätte ich diese zum Test zusätzlich eingebaut.

Thema: WPF auf der Powerwall?
Am im Forum: GUI: WPF und XAML

Das Problem ist, dass ich noch keinen Zugriff auf das Zielsystem habe und zu Hause habe ich nur eine Grafikkarte im Rechner. Von Rendering Tiers habe ich auch schon gelesen, von mir aus aber nichts geändert. Nachdem die CPU aber bei grafisch aufwändigeren Dingen nicht ausgelastet wird, gehe ich davon aus, dass die GPU mithilft.

In einem Webcast zur PDC 2008 http://channel9.msdn.com/pdc2008/PC46/ wird zum Schluss eine kleine Powerwall gezeigt (drei Apple Cinema-TFTs (WUXGA) an einem Rechner mit zwei Grafikkarten), auf dem mehrere 720p-Videos angezeigt werden. Bloß wie das gemacht wurde (Windows erkennt die Monitore automatisch und die WPF-Anwendung wird wirklich nur über alle drei Monitore maximiert und die Last auf beide Grafikkarten verteilt?), wird leider nicht erwähnt.

Thema: WPF auf der Powerwall?
Am im Forum: GUI: WPF und XAML

Salut,

für ein Projekt soll eine Powerwall (=großer Bildschirm aus mehreren kleinen) über WPF oder (managed) Direct3D angesprochen werden. Grundsätzlich präferiere ich die WPF (evtl. verhagelt uns das aber die Performance), nur habe ich im Internet leider nichts zu folgender Frage gefunden:

Unterstützt WPF mehrere GPUs in einem Rechner, d.h. dass z.B. ein Rechner mit zwei Grafikkarten zwei Teilstücke der Powerwall ansteuern könnte?


Danke im Voraus,

Stefan

Thema: Picking in Viewport3D
Am im Forum: GUI: WPF und XAML

Wow. Das ist ja mal richtig klasse.


Hat mir weitergeholfen. Danke,

Stefan

Thema: Picking in Viewport3D
Am im Forum: GUI: WPF und XAML

Salut,

bietet der Viewport3D Unterstützung für Picking (d.h. die Identifikation von angeklickten Objekten)?

Ich bin in dem Thema leider nicht sonderlich bewandert, aber wenn ich das richtig verstehe, bietet ja z.B. OpenGL die Möglichkeit, sich eine Liste von mgl. Objekten zurückgeben zu lassen, wobei jedem Objekt eine Tiefe zuordnet ist, sodass ich das "oberste" raussuchen könnte.

Der Suchmaschinenmonopolist konnte mir zumindest mit meinen Suchworten auch nicht weiter helfen.


Danke im Voraus,

Stefan

Thema: Vista: 32 oder 64 Bit nehmen
Am im Forum: Smalltalk

Ich bin Anfang der Woche umgestiegen, nachdem es günstig Speicher gab.

Der Umstieg ging eigentlich recht problemlos über die Bühne, wobei die Hardware etwa ein Jahr alt ist und ich für alles Treiber gefunden habe:
MSI P35 Neo 2FR
E6550
8500GT
DWL-G510 (rev. C), den Treiber hatte ich auf der Hersteller-Website zwar nicht, dafür auf meiner HDD (also keine Ahnung woher) gefunden

(der mitgelieferte Treiber für den Chipsatz ist wohl nicht das Wahre, denn nach einem Update [wurde von Vista selbst vorgeschlagen], war der Rechner wieder merklich flotter)

Probleme hatte ich mit Nero 6.6.1.15a, das wohl die Windows-Version abgefragt. Auf dieser Windows-Version wäre es nicht unterstützt. Was sehr wohl geklappt hat, war aber den Ahead-Ordner aus der 32bit Installation einfach rüberzukopieren. Zwar fragt er mich jetzt bei jedem Start nach dem Lizenzschlüssel, aber brennen tut er.

VS2008 Pro werde ich morgen installieren, VC# 2008 Express SP 1 lief aber ohne Probleme.

Da für die 32bit-Kompatibilität einige Programme und Bibliotheken "doppelt" installiert werden, liegt die Grundinstallation bei Business bei 13GB (vgl. 32bit 8GB).

Wenn du also nicht vorhast, den Arbeitsspeicher aufzurüsten, würde ich vorerst bei 32bit bleiben, denn wirkliche Vorteile hat es nicht, außer natürlich, mehr Speicher adressieren zu können.

Thema: eine Art Bildschirmschoner
Am im Forum: GUI: Windows-Forms

Wenn die Anwendung die einzige auf dem System laufende ist, spricht doch nichts dagegen, einen Bildschirmschoner mittels C# zu schreiben und das Aktivierungsintervall auf 5min zu setzen.

Bildschirmschoner sind umbenannte EXE-Dateien, die ein paar Befehlszeilenargumente akzeptieren müssen/können:
http://de.wikipedia.org/wiki/Bildschirmschoner#Microsoft_Windows

Thema: Mehrere Bilder in einem ListViewItem
Am im Forum: GUI: Windows-Forms

Zitat von msimmerl
Was hab ich falsch gemacht?
Die OwnerDraw-Eigenschaft des ListViews nicht auf True gesetzt?

Thema: Vista: Textdatei in Program Files Folder ändern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mit dem Installer kenne ich mich leider nicht aus, was mich aber stutzig macht, ist die Zeile

Zitat von TSMike

                
  string path = string.Concat(Registry.LocalMachine.OpenSubKey(@"Software\office").GetValue("Path"), "File.txt");
Concat solltest du nur verwenden, wenn du dir sicher bist, dass der String des ersten Arguments auch wirklich mit einem Backslash endet, sonst wird aus
C:\Program Files und File.txt
nämlich
C:\Program FilesFile.txt

In der Situation empfiehlt sich System.IO.Path.Combine:

                
  string path = System.IO.Path.Combine(Registry.LocalMachine.OpenSubKey(@"Software\office").GetValue("Path"), "File.txt");

Thema: Vista: Textdatei in Program Files Folder ändern
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hast du sicherheitshalber unter

C:\Users\Benutzername\AppData\Local\VirtualStore\Program Files

bzw. unter Vista x64

C:\Users\Benutzername\AppData\Local\VirtualStore\Program Files (x86)

geschaut, ob die Textdatei dorthin gespeichert wurde? Im Normalfall sollte beim Starten der Anwendung mit Admin-Rechten (UAC-Nachfrage) aber direkt nach C:\Program Files geschrieben werden. Hast du sonst evtl. etwas Code als Anschauungsmaterial?

Thema: [gelöst] String mit Befehlszeile ausführen, ohne ihn in EXE-Datei und Argumente zu splitten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

nur noch kurz zur Info:

Hatte am 5.10. eine Mail an das Projektteam von VLC geschickt und heute Rückmeldung bekommen, dass das Installer-Skript entsprechend angepasst wurde:

http://git.videolan.org/?p=vlc.git;a=commitdiff;h=f34d75845e92aba425f9e3b5954c79b5b174684d

Das nenne ich Support.

Thema: [gelöst] String mit Befehlszeile ausführen, ohne ihn in EXE-Datei und Argumente zu splitten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ok, dann belasse ich es dabei und setze das bei VLC in den Bug Tracker.


Danke und schönen Sonntag noch,

Stefan

Thema: [gelöst] String mit Befehlszeile ausführen, ohne ihn in EXE-Datei und Argumente zu splitten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Salut,

tut nicht. Wenn ich /c durch /k ersetze, sehe ich, dass ihm das Leerzeichen nach C:\Program (zurecht) aufstößt.

Der entsprechende Eintrag im Kontextmenü von wmv-Dateien tut aber (warum auch immer).

Gibt's eine Chance, das noch zum Laufen zu bekommen? Ansonsten tut's mit VLC halt nicht, Nicht-Standard-konforme Anwendungen haben dann zurecht das Nachsehen.


Stefan

Thema: [gelöst] String mit Befehlszeile ausführen, ohne ihn in EXE-Datei und Argumente zu splitten
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Salut,

wenn ich mir für einzelne Dateitypen die Befehlszeilen für bestimmte Befehle (Öffnen, Drucken, Play...) aus der Registry lasse, erhalte ich gewöhnlich einen String der Form

"C:\Pfad\Anwendung" "%1"
Diese würde ich nun gerne ausführen, indem ich den Parameter %1 mit dem Dateipfad ersetze und dann das ganze ausführe.

Process.Start scheint mir hier aber nicht weiter zu helfen, da die eine Überladung keine Befehlszeileparameter im String akzeptiert, die andere die Parameter als eigenes Argument haben möchte.

Manuell den String aufsplitten, erweist sich auch als schwierig, da z.B. VLC seinen Pfad nicht in Hochkommata setzt:
C:\Program Files\VideoLAN\VLC\vlc.exe --started-from-file "%1"

Für Tipps, wie ich das elegant löse, wäre ich dankbar.


Stefan

Thema: Speicherlecks bei BitmapImage
Am im Forum: GUI: WPF und XAML

Salut,

ich verwende System.Windows.Controls.Image.

Bin jetzt ein Stückchen schlauer, wie die Caching-Strategie von WPF funktioniert. Ich hatte testweise die Bilder in einer Schleife dem Image-Control zugewiesen, da trat das Problem mit dem immensen Speicherverbrauch auf.

Bei normalem Durchklicken durch ein Photo-Album pendelt sich der Verbrauch bei ~50MB ein.

Das Verhalten lässt sich mit folgendem Programm nachvollziehen. Klickt man mit kurzer Pause auf den Button, so schwankt der Verbrauch um 50MB. Klickt man dagegen schnell in Folge auf den Button, kann man den Verbrauch drastisch in die Höhe treiben. Nach dem letzten Klick in der schnellen Folge wird aber nicht etwa aufgeräumt, sondern erst, nachdem ein weiteres Bild in etwas größerem Abstand geladen wurde.

Für mich im Endeffekt heißt das, dass ich die Bilder nacheinander in großer Größe mit den Standard-WPF-Methoden (siehe unten) anzeigen kann. Für die Leiste mit den Thumbnails greife ich auf den Windows.Drawing-Namespace zurück (laden, verkleinern, speichern auf Platte).

Damit ist der Thread erledigt. Danke.


<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="600" Width="800">
    <DockPanel>
        <Button Name="NextImageButton" Click="NextImageButton_Click" DockPanel.Dock="Top">Next image</Button>
        <Image Name="MyImage" />
    </DockPanel>
</Window>


    public partial class Window1 : Window
    {
        string[] files;
        int curImageindex = -1;

        public Window1()
        {
            InitializeComponent();

            this.files = System.IO.Directory.GetFiles(@"D:\Bilderpfad", "*.jpg");
        }

        private void NextImageButton_Click(object sender, RoutedEventArgs e)
        {
            curImageindex = (curImageindex + 1) % files.Length;
            this.MyImage.Source = new BitmapImage(new Uri(this.files[curImageindex], UriKind.Absolute));
        }
    }

Thema: Speicherlecks bei BitmapImage
Am im Forum: GUI: WPF und XAML

Salut,

das verschiebt das Problem leider nur. Ich hatte dasselbe auch mit 60 Bildern nacheinander anzeigen probiert, mit demselben Ergebnis.
Das kann doch nicht sein, dass sich die WPF-Entwickler da nichts gedacht haben. Ich als Entwickler habe doch in vielen Fällen die besseren Informationen, wann ich Bilder nicht mehr brauche, da kann die eingebaute Vorhaltestrategie noch so gut sein...


Stefan

Thema: Speicherlecks bei BitmapImage
Am im Forum: GUI: WPF und XAML

Salut,

für einen Prototyp habe ich in meinem Fenster ein Raster von Image Controls angelegt. Bei Klick auf einen Button werden alle diese Image Controls mit (verschiedenen) JPEGs gefüllt:


ImageControlName.Source = new BitmapImage(new Uri(@"E:\somepath\graphic.jpg", UriKind.RelativeOrAbsolute));

Bei Klick auf einen weiteren Button werden die Image-Controls mit anderen JPEGs gefüllt (gleicher Code, aber andere Pfade).

In beiden Schritten werden jeweils 30 Bilder à 1680x1050 Pixel geladen.

Nach Schritt 1 zeigt der Task Manager einen Verbrauch von 300MB an, nach dem zweiten Schritt sind es über 600.

Leider führt das zu langwierigen Swappen des Hauptspeicher-Inhaltes zwischen Platte und RAM. Ein Dispose oder ähnliches habe ich aber leider nicht gefunden. GC.Collect() bringt exakt gar nichts. Das Entladen der Form auch. Erst, wenn das Programm komplett beendet wird, wird der Speicher freigegeben. Wie bekomme ich meine Resourcen denn wieder frei?


Danke im Voraus,

Stefan

Thema: Schnelle Bildverarbeitung im Hintergrund
Am im Forum: GUI: WPF und XAML

Im Code Stack Fenster steht [External Code] und sonst nichts, und in den Details der Exception nur ein {Cannot evaluate expression because the current thread is in a stack overflow state.}.
Da geht irgendwo in den WPF-Assemblies was schief, wobei ich nicht bestreiten will, dass das wohl auf die gehackte BitmapSource zurückzuführen ist.

Inzwischen wurde mir in den offiziellen MSDN Foren weitergeholfen: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3385024&SiteID=1 Die dort vorgestellten ShaderEffects sind sehr performant und sind im Gegensatz zu dem oben verlinkten Hack offiziell unterstützt. Bleibt zu hoffen, dass das Service Pack 1 für .NET 3.5 bald veröffentlicht wird


Stefan

Thema: Schnelle Bildverarbeitung im Hintergrund
Am im Forum: GUI: WPF und XAML

Salut,

Zitat von kleines_eichhoernchen
StackOverflowException tritt meist bei einer endlosen Rekursion auf.
Richtig, nur bin ich mir nicht bewusst, eine ausgelöst zu haben.
Zitat von kleines_eichhoernchen
Zitat
// wait until the picture has been loaded
while (!this.loadedImage) { }
Das ist auch großer mist, da der Thread der diese Anweisung ausführt 100% CPU-Last beansprucht.
Ich weiß, aber mit meinem Problem hat das aber nichts zu tun. Das ganze ist nur ein Prototyp.

Thema: Schnelle Bildverarbeitung im Hintergrund
Am im Forum: GUI: WPF und XAML

Salut,

für einen Bildbetrachter bin ich auf der Suche nach einer Möglichkeit, Filter (Kontrast, Gamma...) auf Bilder anzuwenden. Der Bildbetrachter soll allerdings nicht die lokalen Bilder verändern, sondern die Bilder sollen nach dem Laden auf die BitmapSource-Instanzen angewendet werden. Da je nach Anzahl der Filter das ganze allerdings ein Weilchen dauern kann und ich die GUI derweil nicht blockiert haben möchte, würde ich das gerne in einem Hintergrund Thread implementieren.

Auf meiner Suche im Web bin ich über den sehr interessanten Artikel WPF Image Processing gestoßen, scheitere aber nun daran, das Laden und Bearbeiten des Bildes in einen Hintergrund-Thread zu packen:


class Filter
{
    /// <summary>
    /// Applies a sample filter to a given BitmapSource
    /// </summary>
    /// <param name="bs">BitmapSource to process</param>
    public static void process(BitmapSource bs)
    {
        WICBitmap wb = new WICBitmap(bs);

        try
        {
            using (WICBitmapLock bitmapLock = wb.Lock())
            {
                WICBitmapBuffer bitmapBuffer = bitmapLock.Data;
                unsafe
                {
                    Int32* pStart = (Int32*)bitmapBuffer.Buffer.ToPointer();
                    Int32* pEnd = pStart + bitmapBuffer.Size / sizeof(Int32);
                    for (; pStart != pEnd; ++pStart)
                    {
                        //           RRGGBB
                        *pStart &= 0xFF0000;
                    }
                }
            }
        }
        catch (Exception ex)
        {
        }

        wb.Dispose();
    }
}        

private BitmapSource bitmapSource;
private bool loadedImage;

public Window1()
{
    InitializeComponent();

    // load the image in the background
    new Thread(delegate()
    {
        BitmapSource bs = new BitmapImage(new Uri(@"C:\file.jpg"));
        bs.Freeze();

        Filter.process(bs);

        this.bitmapSource = bs;

        loadedImage = true;
    }).Start();

    // wait until the picture has been loaded
    while (!this.loadedImage) { }

    Image img = new Image();
    img.Source = this.bitmapSource;
    this.AddChild(img);
}
Der Konstruktor des Fensters läuft ohne Probleme bis zur letzten Zeile (einschließlich), lasse ich dann aber den Debugger das Programm weiter ausführen, erhalte ich die Exception

An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll

In einem Test habe ich das BitmapImage im Konstruktor in das Image-Control geladen und dann auf ButtonClick die Verarbeitung in einem Hintergrund-Thread angestoßen, da hat es funktioniert.
Allerdings wird während des Ladens des Bildes der GUI-Thread blockiert, was aber gerade bei Bildern von 8-Mega-Pixel-DigiCams nicht gerade kurz ist.

Wenn jemand wüsste, wie ich obigen Code doch zum Laufen bekomme, wäre ich sehr dankbar, für Vorschläge, wie ich Bilder im Hintergrund laden und schnelle Filteroperationen darauf anwenden kann, selbstverständlich auch.


Danke im Voraus,

Stefan

Thema: WPF-Vorschau ohne Angabe der Größe in XAML
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Salut,

nach einer etwas längeren Pause hantiere ich wieder mit XAML herum. Der Editor in VS2008 mit Vorschau und Quelltext ist ja ganz nett, aber kann ich mir die Vorschau auch anzeigen lassen, ohne Width und Height im Root-Element des XAML-Quellcodes anzugeben? Wenn ich die Angaben weglasse, schrumpft die Anzeige auf einen Pixel zusammen.

Bei Usercontrols, die sich an die Größe ihres Containers anpassen sollen, führt die Angabe von Width und Height zu ungewünschten Effekten (Zentrierung und nicht Maximierung).


Danke im Voraus,

Stefan

Thema: Globale Hotkeys mit WPF?
Am im Forum: GUI: WPF und XAML

Salut,

funktioniert.


Danke,

Stefan

Thema: Globale Hotkeys mit WPF?
Am im Forum: GUI: WPF und XAML

Salut,

wollte ein Programm von Windows Forms auf WPF umstellen, dabei stoße ich allerdings auf das Problem, dass ich einen globalen Hotkey registrieren muss. Unter Windows Forms verwendete ich dazu RegisterHotKey und überschrieb dann die WndProc-Methode der Forms-Klasse.

Wie bekomme ich das unter WPF gebacken?


Danke im Voraus,

Stefan

Thema: Java: setRequestProperty funktioniert nicht
Am im Forum: Rund um die Programmierung

Salut,

dieses Posting habe ich schon bei java-forum.org und forum.java.sun.com gepostet, bei beiden bekam ich keine Antwort, deshalb probiere ich mein Glück hier.

Ich versuche, bei einer HTTP-Abfrage, zusätzliche Werte wie Referer und Cookies mit zu senden. Dazu wollte ich die setRequestProperty-Methode der URLConnection-Klasse verwenden. Doch weigert sich Java leider partout, die eingefügten Werte mitzusenden.

Das folgende Codebeispiel demonstriert mein Problem. Der Service http://pgl.yoyo.org/http/browser-headers.php gibt die vom Browser geschickte Anfrage zurück. In der Ausgabe taucht aber weder die geänderte Accept-Eigenschaft, noch der Referer auf.


import java.io.*;
import java.net.*;


public class HeaderTest
{
   private static final int BUFFER_SIZE = 1024;

   /**
    * @param args
    */
   public static void main(String[] args) {

      String result = "";
      
      InputStream is = null;
      StringBuilder sb = new StringBuilder();
      char[] buffer = new char[BUFFER_SIZE];
      
      String urlString = "http://pgl.yoyo.org/http/browser-headers.php"; // "http://jpeg.homeip.net:8088/request.html";
      
      try {
         
         URL url = new URL(urlString);
         URLConnection urlCon = url.openConnection();
         urlCon.setUseCaches(false);
         // urlCon.setAllowUserInteraction(false);
         urlCon.setRequestProperty("Accept", "Nothing");
         urlCon.setRequestProperty("Referer", "http://www.test.de/results.asp");

         urlCon.connect();
         
         is = url.openStream();
         int readBytes;
         BufferedReader br = new BufferedReader(new InputStreamReader(is));
         while((readBytes = br.read(buffer, 0, BUFFER_SIZE)) != -1)
         {
            sb.append(new String(buffer, 0, readBytes));
         }
         
         result = sb.toString();
         
      } catch (Exception e) {
         // TODO: handle exception
         System.out.println(e.getStackTrace().toString());
      }
       finally {
           if ( is != null )
             try { is.close(); } catch ( IOException e ) { }
       }

       System.out.println(result);

   }

}
Was mache ich falsch? Das auf Socket-Ebene zu programmieren, würde ich nur ungern tun.

Edit inzwischen konnte man mir dann doch im offiziellen Java-Forum forum.java.sun.com weiterhelfen.

Statt

is = url.openStream();
muss es

is = urlCon.getInputStream();
heißen.

Danke im Voraus,

Stefan

Thema: [wpf] Binding: Eigenschaft von der Eigenschaft
Am im Forum: GUI: WPF und XAML

Salut,

hm, das hat er mir beides mit der Fehlermeldung, dass er das nicht konvertieren könne, um die Ohren gehauen.

In der Fehlermeldung fand ich aber mein Stichwort Binding-Klasse:

ms-help://MS.VSExpressCC.v80/MS.NETFX30SDK.1033/cpref30/html/P_System_Windows_Data_Binding_Path.htm

Dort habe ich dann nachgeschaut und auf Grund des Kommentares dort es noch mal ohne die Klammern probiert. Plötzlich ging es, obwohl ich mir eigentlich sicher war, das so probiert zu haben, also die Variante


{Binding Path=Eigenschaft.MeineEigenschaft}
Trotzdem natürlich danke. Was ist denn das für ein Buch, nur aus Interesse?


Stefan

Thema: [wpf] Binding: Eigenschaft von der Eigenschaft
Am im Forum: GUI: WPF und XAML

Salut,

zur Anzeige einer internen Collection in einer ListBox verwende ich Data Binding. Die Vorlage für die Einträge sieht dann z.B. so aus:


<ListBox.ItemTemplate>
	<DataTemplate>
		<DockPanel>
			<Image Width="133" Height="100" Source="{Binding Path=PreviewImage}"
        Margin="2" />
		</DockPanel>
	</DataTemplate>
</ListBox.ItemTemplate>
Nun habe ich folgendes Problem: Bei einigen Fällen, hat der Objekttyp in der Kollektion eine Eigenschaft, die selbst ein Objekt einer Klasse ist. Als Beispiel:


class EintragsKlasse
{
  class EintragsEigenschaftsKlasse
  {
    public string MeineEigenschaft;
  }

  public EintragsEigenschaftsKlasse Eigenschaft;
  public string AndereEigenschaft;
}
Auf die Eigenschaft vom Typ String zuzugreifen ist mit

{Binding Path=AndereEigenschaft}
kein Problem, wie kann ich aber im auf MeineEigenschaft bei Eigenschaft zugreifen. Ich hatte gehofft, das geht mit

{Binding Path=Eigenschaft.MeineEigenschaft}
Davon war das Kompilat aber wenig beeindruckt. Es wird zwar kein Fehler geworfen, allerdings auch nichts angezeigt.

Eigentlich würde ich die Eigenschaften gern gebündelt in einer EintragsEigenschaftsKlasse gebündelt lassen und nur ungern die Eigenschaften alle in die EintragsKlasse schieben. Kann ich das trotzdem mit Binding in XAML realisieren?


Danke im Voraus,

Stefan

Thema: [wpf] Anwendung im Systray
Am im Forum: GUI: WPF und XAML

Salut,

gerade bin ich wieder am Werkeln mit WPF und versuche eine Anwendung zu erstellen, die ins Systray minimiert wird.

Wie ich zahlreichen Artikeln im Web entnommen habe, wird das NotifyIcon nicht unter WPF zur Verfügung gestellt, weshalb ich die Version aus dem Windows.Forms Namespace verwende.

Fast alles funktioniert auch soweit, nur ein kleines Problem bleibt bestehen: Wenn das Icon im Systray angeklickt wird, erscheint die Form zwar wieder in der Taskleiste, aber nicht auf dem Bildschirm. Klicke ich dann die Schaltfläche in der Taskleiste an, wird das Fenster aus dem Minimiert-Zustand geholt (Animation) und angezeigt.


namespace WindowsApplication1
{
    public partial class Window1 : System.Windows.Window
    {
        System.Windows.Forms.NotifyIcon ni;

        public Window1()
        {
            InitializeComponent();

            this.StateChanged += new EventHandler(Window1_StateChanged);

            this.ni = new System.Windows.Forms.NotifyIcon();

            this.ni.Icon = 
                System.Drawing.Icon.ExtractAssociatedIcon(@"D:\icon.ico");

            this.ni.Visible = true;

            this.ni.Click += new EventHandler(ni_Click);
        }

        void Window1_StateChanged(object sender, EventArgs e)
        {
            switch (this.WindowState)
            {
                case WindowState.Minimized:
                    this.Visibility = Visibility.Hidden;
                    break;
                default:
                    if (this.Visibility != Visibility.Visible)
                        this.Visibility = Visibility.Visible;
                    break;
            }
        }

        void ni_Click(object sender, EventArgs e)
        {
            if (this.Visibility == Visibility.Visible)
            {
                this.WindowState = WindowState.Minimized;
            }
            else
            {
                this.Visibility = Visibility.Visible;  // anzeigen
                this.WindowState = WindowState.Normal;  // Fenstergröße
                this.Focus();  // Fokus
            }
        }
    }
}

Was läuft da falsch und wie kann ich das korrigieren?

Edit
Damit tut es jetzt:


void notifyIcon1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {
        if (this.Visibility == Visibility.Hidden)
        {
            this.Visibility = Visibility.Visible;
            this.Show();
            this.WindowState = WindowState.Normal;
            this.Focus();
        }
        else
        {
            this.hiding = true;
            this.WindowState = WindowState.Minimized;
            this.Visibility = Visibility.Hidden;
            this.Hide();
            this.hiding = false;
        }
    }
}


private bool hiding = false;

void MainWindow_StateChanged(object sender, EventArgs e)
{
    if (!this.hiding)
    {
        switch (this.WindowState)
        {
            case WindowState.Minimized:
                this.Visibility = Visibility.Hidden;
                this.Hide();
                break;
        }
    }
}

Danke im Voraus,

Stefan