Laden...

Forenbeiträge von bl4ckY Ingesamt 193 Beiträge

04.01.2012 - 11:41 Uhr

Alles was gleich ist in eine Parentclass packen und davon erben.

13.12.2011 - 15:51 Uhr

Nein, dass heißt das du mit etwas Initiative ohne große Probleme selbst darauf gekommen wärst, siehe 1.1 Erst suchen und in die Doku schauen, dann posten b.z.w 1.1.1 Nicht nach Grundlagen fragen

07.11.2011 - 16:29 Uhr

Zur Visualisierung im Browser würde ich an deiner Stelle Openlayers nehmen. Hier findest du dutzende sehr gute und verständliche Beispiele.

Musst dir dann nur noch die Datei auseinander bauen und die Lat/Lon Werte übergeben.

07.09.2011 - 15:32 Uhr

Web: Primär HTML + jQuery(Javascipt)
Lokal: WPF

Asp.Net hat doch garnichts mit der UI zu tun oder?

13.05.2011 - 09:46 Uhr

Danke für die schnelle Hilfe 😃

*edit* Ich werde wohl mein Konzept nochmal überdenken, ist ja eigentlich Blödsinn die Objekte fest zu deklarieren /edit

13.05.2011 - 09:28 Uhr

Ich würde gerne über ein Objekt mit foreach iterieren. Nun weiß ich nicht ob das überhaupt möglich ist. Ziel des ganzen ist das ich in den Objekten Informationen zum Aufbauen der Form halte. Ich will die Objekte aber nicht einzeln ansprechen sondern ich würde gerne einfach jedes Objekt im Objekt durchlaufen. Gibts da eine Möglichkeit?


public class IbanBody : Information
{
        public Country country { get; set; }
        public CheckDigit checkDigit { get; set; }
        public Bankcode bankCode { get; set; }
        public PositionBankcode positionBankcode { get; set; }
        public AccountNumber accountNumber { get; set; }
        public ControlDigit controlDigit { get; set; }
        public AccountType accountType { get; set; }
        public CodeGuichet codeGuichet { get; set; }
        public RegionalCode regionalCode { get; set; }

        public override void setKey(object key)
        {
            throw new NotImplementedException("This method isn't implemented for the IbanBody");
}
    }
03.05.2011 - 13:53 Uhr

Nach langer Suche habe ich endlich herausgefunden woran es liegt. Allerdings stehe ich derzeit auf dem Schlauch und weiß nicht so recht wie ich es lösen kann.

Ich öffne ein Fenster in dem man die beiden zu vergleichenen Sessions auswählen kann. Damit dieses Fenster nicht auf dem Screenshot auftaucht verstecke ich es. Dabei scheint sich die komplette Form zu refreshen und versaut dabei meine Screenshots.

private void button1_Click(object sender, EventArgs e)
        {

           //Die Quelle des Fehlers!
            this.Hide();

            (comboBoxTabs1.SelectedItem as ctlPuttyPanel).Activate();
            Bitmap sc1 = (comboBoxTabs1.SelectedItem as ctlPuttyPanel).GetScreenshot();
            sc1.Save("a1.bmp", ImageFormat.Bmp);

            (comboBoxTabs2.SelectedItem as ctlPuttyPanel).Activate();
            Bitmap sc2 = (comboBoxTabs2.SelectedItem as ctlPuttyPanel).GetScreenshot();
            sc2.Save("a2.bmp", ImageFormat.Bmp);
            DialogResult = DialogResult.OK;
        }

Kann ich verhindern das sich die komplette Form neu lädt b.z.w wie löse ich das ganze am geschicktesten? Schließen, Dispose und alle anderen gängigen Vorgehensweisen sorgen für das gleiche Problem

03.05.2011 - 10:16 Uhr

Und hier Nummer 2:

Ja wieso er hier richtig gezeichnet ist kann ich nicht beantworten.

03.05.2011 - 09:50 Uhr

Hier mal 2 Beispielbilder:

Das erste ist quasi das erste Vergleichsbild. Der etwas deformierte Ordner liegt normalerweise hinter dem Programm.

03.05.2011 - 08:43 Uhr

Ja das funktioniert auch soweit mit kleinen Abstrichen. Wenn jedoch etwas hinter dem eigentlichen Programm ist (Ordner, anderes Programm) wird von diesem das Bild gemacht. Scheint so als würde sich der z-index ändern und das Programm komplett nach hinten rutschen obwohl es eigentlich vorne liegt. Leider schafft auch BringToFront() keine Abhilfe.

03.05.2011 - 08:10 Uhr

Kannte ich noch garnicht. Funktioniert aber leider auch nicht da ich die Putty Session in einem eigenen Prozess laufen und das Control nur überlagern. Der Screenshot ist also nur grau.

edit: Zur Verständlichkeit etwas angepasst

02.05.2011 - 17:06 Uhr

Nein ändert leider auch nichts. Bisher auch keine Fortschritte meinerseits.

02.05.2011 - 15:31 Uhr

Also so wie ich es versteh ist oben genannte Lösung akzeptabel. Kannst glaube auch auf this.Active prüfen. Also einfach vor dem Hotkey abfangen schauen ob Programm A aktiv ist. Wenn ja dann Hotkeys abfangen, wenn Nein dann klappe halten.

02.05.2011 - 15:16 Uhr

Hallo,

habe ein kleines Problem. Ich will 2 Putty Sessions miteinander vergleichen. Nun mach ich mir von den 2 Sessionfenstern jeweils einen Screenshot und will dann die Bilder nach Unterschieden untersuchen. Problem ist das er mir keine ordentlichen Screenshots liefert.

Ich wechsel zwischen den beiden Sessions (die in Tabs laufen) hin und her und mache mir jeweils einen Screenshot. Problem ist das er mir Bilder von Ordnern zurückliefert vorrausgesetzt es befindet sich ein Ordner hinter dem Programm. Wird es direkt auf dem Desktop ausgeführt und alles andere ist minimiert bekomme ich exzellente Bilder. Leider versteh ich nicht wieso er solch ein Unfug macht.


//Fokus auf Tab setzen, Screenshot methode aufrufen
(comboBoxTabs1.SelectedItem as ctlPuttyPanel).Activate();
Bitmap sc1 = (comboBoxTabs1.SelectedItem as ctlPuttyPanel).GetScreenshot();
sc1.Save("a1.bmp");

//Position der Session ermitteln (Tab)
 public Bitmap GetScreenshot()
{
            Point p = Parent.PointToScreen(this.applicationwrapper.Location);
            Bitmap screenshot = screenCapture(this.applicationwrapper.Width, this.applicationwrapper.Height, p);
            return screenshot;
}

//Bild von übergebenen Bereich machen
private Bitmap screenCapture(int width, int height, Point location)
{
            Bitmap bmpScreenShot = new Bitmap(width, height);
            Graphics gfx = Graphics.FromImage((Image)bmpScreenShot);
            gfx.CopyFromScreen(location.X, location.Y, 0, 0, new Size(width, height));
            return bmpScreenShot;
}

Ich weiß nicht ob es daran liegt das er zu langsam zeichnet, kann es mir aber eigentlich nicht vorstellen. Mir ist gerade noch aufgefallen das er einige Pixel nicht richtig zeichnet. Buchstaben o.ä. wirken verschwommen oder fehlerhaft. Woran kann das liegen?

02.05.2011 - 14:56 Uhr

Setze einfach eine Variable die bei Activeted oder Deactived gesetzt wird.

Activated ==> true, Deactivated ==> false. Und bei deinen Hotkeys guckst du ob die Variable gerade true oder false ist.

Glaube aber deinen Text nicht ganz verstanden zu haben. Etwas verwirrend. Was soll das ganze denn bewirken? Vielleicht gibt es hier ja eine deutlich elegantere und bessere Lösung.

02.05.2011 - 14:49 Uhr

Also ich habe das Evaluation Board. Unterstützt relativ viele µController zum rum probieren und ist gut erweiterbar. Habe das ganze aber in C/C++ gemacht.

Wichtiger bei der Robotik sind eigentlich Kenntnisse in Elektrotechnik. Wenn da Kenntnisse fehlen wird das ganze relativ kompliziert, da man Sensoren ja nicht einfach so in den nächsten Pin steckt und es funktioniert 😄 Ansonsten kann man zum Anfangen noch Asuro empfehlen. Gibt es auch einige Erweiterungsplatinen und man lernt die grundlegenden Dinge.

28.04.2011 - 07:51 Uhr

Lag anscheinend an dem Filter der hier in der Firma verwendet wird. Problem behoben 😃

27.04.2011 - 08:13 Uhr

Kann das ganze von deiner Seite nicht runterladen da das Zertifikat nicht verifiziert werden kann. Gibt es noch irgendwo eine andere Quelle zum runterladen?

Certificate verification for host updatesystem.net:443 failed.

The following error has occurred: "revocation status unresolvable (depth = 0), unable to get issuer certificate"

26.04.2011 - 09:51 Uhr

Lösung: SendKeys.SendWait Method

Scheint ein Problem der verschiedenen Windows Versionen zu sein.

<appSettings>
    <add key="SendKeys" value="SendInput"/>
  </appSettings>

in die App.config löst zumindest bei mir das Problem.

26.04.2011 - 09:33 Uhr

Also es scheint wirklich so zu sein das Putty das Input Fenster selber zeichnet. Man kommt also über die Win32 Funktionen nicht dran. Einzige Möglichkeit die bleibt ist SendKeys. Das scheint auch zu funktionieren zumindest bei anderen Programmen. Bei mir sendet er die Sachen falsch. Ich werde mal weiter rum probieren und wenn ich eine Lösung habe hier rein schreiben 😃

Programm wo es funktioniert

26.04.2011 - 07:53 Uhr

Verzeihung das ich jetzt erst antworte, hatte Urlaub 😃

Ich kann dir nicht konkret weiterhelfen, aber ich denke, bei SendMessage verwendest du das falsche Handle. Du brauchst ein Handle von dem Eingabecontrol, nicht von dem Prozess oder dem Hauptfenster.

Leider komme ich nicht an das richtige Handle. Habe versucht es mit Spy++ raus zufinden aber anscheinend ist Putty etwas eigenartig aufgebaut.

SharpSSH hatte ich mir auch angeschaut wollte es allerdings nicht nutzen da es seit 2007 keine Änderungen mehr gab.

15.04.2011 - 11:08 Uhr

Hallo,

da in unserem Betrieb viel über Putty gearbeitet wird wollte ich gerne eine Art Makrofunktion erstellen. Bisher habe ich 2 Möglichkeiten versucht aber beide funktionieren nicht so wie gewünscht.

if (m_Process.Responding)
{
    System.Windows.Forms.SendKeys.SendWait("ABC");
}

Hier wird der String leider vollkommen falsch übergeben z.B AAAABBBCCCC.

Wenn ich die Win32 API nutze kommt leider garkeine Ausgabe.

SendMessage(m_AppWin, (uint)WM.SETTEXT, 0, new StringBuilder("ABC"));

PostMessage zum senden des Schließenbefehls geht komischerweise. Meine Vermutung ist das ich nicht an den richtigen Prozess von Putty sende.

Hat damit zufaellig mal einer Erfahrungen gemacht? Es muss aufjedenfall irgendwie funktionieren da PuttyCM auch eine Makrofunktion bietet. Leider ist die Seite seit mehreren Wochen/Monaten nicht zu erreichen.

14.04.2011 - 11:41 Uhr

Ok Problem hat sich erledigt. Irgendwie hat das Assembly ärger gemacht. Ist aber jetzt gelöst.

14.04.2011 - 09:26 Uhr

Hallo,

ich binde eine externe Apllikation (Putty) in mein WPF Programm ein. Nun will ich die Location setzen brauche dafür aber einen System.Drawing.Point. Leider lässt sich die Assembly nicht in das Projekt einbinden. Gibts da irgendeine andere Möglichkeit?

this.applicationwrapper = new ApplicationPanel();
            var d = this.Dispatcher.DisableProcessing();
            this.applicationwrapper.Dock = System.Windows.Forms.DockStyle.Fill;
            this.applicationwrapper.ApplicationName = "\\\\Godbla06\\molis\\Programme\\Molis\\Putty\\putty.exe";
            this.applicationwrapper.Location = //Hier brauch ich den Point;
            this.applicationwrapper.ApplicationParameters = this.ApplicationParameters;
            this.applicationwrapper.TabIndex = 0;
            this.applicationwrapper.m_CloseCallback = this.m_ApplicationExit;
            host.Child = applicationwrapper;
            this.Content = this.host;
            d.Dispose();

Ziel des ganzen ist das der Fensterrahmen ausgeblendet wird.

11.04.2011 - 09:28 Uhr

Ich weiß nicht ob es immer noch so ist aber es war aufjedenfall eine zeitlang so, dass man es in ObjectC machen musste, da der Code ja auch kontrolliert wird. Meine aber gelesen zu haben das, dass ganze wieder entschärft wurde.

24.03.2011 - 14:50 Uhr

Ja den Teil habe ich auch bereits wieder entfernt weil einfach die Steigerung viel zu gering war. Danke für den Hinweis.

24.03.2011 - 14:17 Uhr
private static TiffBitmapDecoder DecodeImage(Task task, string filename)
        {
                Stream imageStreamSource = new FileStream(task.path + filename, FileMode.Open, FileAccess.Read);
                TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.IgnoreColorProfile, BitmapCacheOption.OnLoad);
                return decoder;
        }

Also das hier ist eindeutig der Teil der mein Programm bremst. Auch verständlich da hier auch am meisten geschiet. Aber bei einem 170kb MultiTiff mit 2 Seiten etwa 2Sekunden zu rattern. Das ist wirklich zu viel.

24.03.2011 - 13:13 Uhr

In erster Linie ist mein Problem, dass ich nicht weiß welchen Teil ich mit Threading beschleunigen könnte. Es macht ja eigentlich nur Sinn das ganze in verschiedene Thread aufzuteilen wenn ich mehrere Operationen gleichzeitig machen kann.

private void CreateImagePreviewAndShow(Task task)
        {
            try
            {
                foreach (string filename in task.message)
                {
                    Thread thread = new System.Threading.Thread(
                    new ThreadStart(delegate
                    {
                        this.Dispatcher.BeginInvoke(new Action(delegate()
                        {
                            List<ImageSource> imageList = new List<ImageSource>();
                            TiffBitmapDecoder decoder = DecodeImage(task, filename);
                            CreateListOfClones(imageList, decoder);
                            CreateTabItemsWithCloneList(filename, imageList);
                        }));
                    }));
                    thread.Start();
                }
            }
            catch (Exception)
            {
                ShowProcessingErrorBox();
            }
        }

Das habe ich hier gemacht, leider ohne erkennbare Verbesserung.

24.03.2011 - 12:20 Uhr

Ich muss das nochmal hochstubsen. Nach unzähligen versuchen denke ich das ich es einfach nicht schneller bekomme. Vielleicht hat ja einer einen Moment Zeit und Langeweile um mal drüber zusehen. Meine bisherigen Threading versuche haben das ganze eher verlangsamt also beschleunigt 😕

24.03.2011 - 10:26 Uhr

Was hindert dich daran die Bilder nicht sofort an den Server zu übergeben? Anstatt einen pollenden Client würde ich doch lieber den Server dauerhaft laufen lassen und die Bilder sofort übermitteln.

Oder warum kopiert der Client die Bilder nicht 1-2 die Woche weg? Letztendlich landen Sie doch sowieso in irgendeinem anderen Ordner. Dann spart man sich den Server komplett. Finde die Lösung für das beschriebene Szenario irgendwie unpassend.

22.03.2011 - 08:32 Uhr

Anscheinend tritt das Problem nur bei WsDualBinding auf, wenn der Port 80 belegt ist.
Gibt wohl keine Möglichkeit den Port mit Hilfe von ClientBaseAdress zu ändern.

Einzige Möglichkeit ist hier wohl netTcpBinding.

21.03.2011 - 17:20 Uhr

Ich würde sagen, dass wenn es etwas länger dauert als 1 Sekunde das Bild in das Image Control zu laden, schmeißt er eine Memory Exception. Ist zwar sehr unwarscheinlich aber wer weiß wie groß deine Bilder sind. Kannst du uns bitte noch die Exception hier rein posten.

Was willst du denn damit erreichen? Vielleicht gibt es einen deutlich sinnvolleren Weg

21.03.2011 - 16:53 Uhr

Nein funktioniert leider auch nicht. clientBaseAddress ist doch auch die Callback Adresse. Sprich diese muss auf die Adresse des Clients zeigen. Oder Missverstehe ich da etwas?

Kann es vllt sein das ein Proxy da Ärger macht?

Edit: Habe es mal mit Proxy versucht. Ergebnis ist leider das selbe.

21.03.2011 - 16:47 Uhr

Anders konnte ich mir den Leak aber nicht erklären also habe ich es provisorisch mit an das Post gehangen 😃

21.03.2011 - 16:18 Uhr
// at class level
[System.Runtime.InteropServices.DllImport("gdi32.dll")]
public static extern bool DeleteObject(IntPtr hObject);

// your code
using (System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1000, 1000)) {
    IntPtr hBitmap = bmp.GetHbitmap();
    try {
        var source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(hBitmap, IntPtr.Zero, Int32Rect.Empty, System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
    }
    finally {
        DeleteObject(hBitmap)
    }
}

CodeProject

Ein bisschen Code wäre schön

21.03.2011 - 16:11 Uhr

Hallo,

mein WCF Service akzeptiert von Aussen keine Verbindungen. Anfragen kommen an soweit ich das in Wireshark nachvollziehen kann. Aber der verbindende Client bekommt ein Timeout. Wenn ich Client & Service auf der gleichen Machine ausführe habe ich keine Probleme. Vielleicht hat einer eine Idee oder schon mal das gleiche Problem gehabt.

Hier nochmal die Konfigurationsdatei:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.serviceModel>
        <bindings>
            <wsDualHttpBinding>
                <binding name="WSDualHttpBinding_ICommunication" closeTimeout="00:00:10"
                    openTimeout="00:00:10" receiveTimeout="00:00:20" sendTimeout="00:00:10"
                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" clientBaseAddress="http://localhost:3306/xxx">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <reliableSession ordered="true" inactivityTimeout="01:00:00" />
                    <security mode="Message">
                        <message clientCredentialType="Windows" negotiateServiceCredential="true"
                            algorithmSuite="Default" />
                    </security>
                </binding>
            </wsDualHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://dexx01cl375.xxx.xxx:3307/Communication.svc"
                binding="wsDualHttpBinding" bindingConfiguration="WSDualHttpBinding_ICommunication"
                contract="ICommunication" name="WSDualHttpBinding_ICommunication">
            </endpoint>
        </client>
    </system.serviceModel>
</configuration>

Ich bin etwas ratlos. Firewall gibt es laut SysAdmin keine.

11.03.2011 - 09:38 Uhr

Oh Verzeihung. Habe zwar kurz danach gesucht aber auf den ersten Seiten nichts dergleichen gefunden.

Danke für die Antwort 😃

11.03.2011 - 09:29 Uhr

Ich lese gerade Entwurfsmuster von Kopf bis Fuss und sehe derzeit keinen wirklich Unterschied zwischen dem Observer Pattern und Events. Da die Entwurfsmuster warscheinlich vor den Events entwickeln wurden würde ich sagen das dieses in neueren Sprachen keine wirkliche Anwendung mehr findet.

Einzige Szenario das mir einfällt ist z.B eine Client/Server Chat Applikation. Wobei das ja nicht unbedingt der Definition entspricht.

Aber damit ich nicht auf meine Halbwissen sitzen bleibe wollte ich hier mal fragen ob ihr das Observer noch nutzt und wenn ja könnt ihr einen kurzen Anwendungsfall beschreiben?

Gibt es irgendwelche nennenswerte Vorteile das Observer Pattern einem Event voruziehen?

Hier ein ähnliches Thema mit der gleichen Frage, allerdings kann ich mir nicht vorstellen
das dass Entwurfsmuster garkeine Anwendung mehr findet.

Diskussion auf CodeProject

P.S Das Buch kann ich wirklich jedem ans Herz legen. Sehr gut gemacht

03.03.2011 - 15:17 Uhr

ROFL

Danke hab ich nicht gesehen 😄

03.03.2011 - 14:51 Uhr

Hallo,

habe ein für mich unerklärliches Problem. Ich erstelle mir aus einem Backgroundworker ein Tabitem. Das funktioniert auch Problemlos, allerdings erstellt er mir noch ein weiteres. Heisst bei jedem Durchlauf bekomme ich zwei Tabitems. Diese sind laufend durchnummeriert (0,2,4,6).

Weiß einer warum das passiert? Sonst werden nirgends Tabitems im Code erstellt.
Bei Debuggen springe ich auch nur einmal in die RunWorkerCompleted Methode.

        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Random random = new Random();
            e.Result = random.Next();
        }

        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            tabControl.Items.Add(tabControl.Items.Add(new TabItem()
                {
                    Header = e.Result.ToString()
                }));
        }

Hier ein kleines Bildchen falls meine Erklärung nicht ausreicht.

P.S: Das ungewollte Tab hat auch Inhalt sprich der Name steht auch nochmal als Content drin.

28.02.2011 - 14:11 Uhr

Anonyme Methoden wäre mein Vorschlag. 3 Minuten kurz was dazu erzählt und dann 2 Minuten 1-2 Methoden anschauen.

21.02.2011 - 10:16 Uhr

Gibt es da irgendeine Möglichkeit? Und was mich auch interessieren würde, warum ist das überhaupt so? Sehe da einen Vorteil von Events verloren.

Bisher scheint es nur mit Invokes zu gehen, allerdings mache ich nachdem das Event gefeuert wurde mehrere Aktionen mit der Form und für jede Aktion ein Invoke erstellen finde ich etwas übertrieben.

Größtes Problem ist das jede weitere aufgerufene Funktion ja auch diesem Thread angehört.

18.02.2011 - 10:27 Uhr

Folgendes Szenario:

Mainclass behandelt die GUI

class Mainclass
{

    ServiceCommunication service = null;

   public Mainclass()
   {
       service = new ServiceCommunication();
       tabcontrol.Items.Clear();
       /* Hier schmeißt er mir die Exception 
           [System.InvalidOperationException] = {"Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet."}
       */
   }
}

Auschließlich für Kommunikation mit dem WCF Service zuständig.

class ServiceCommunication
{
   public ServiceCommunication()
   {
      client = new CommunicationClient(new InstanceContext(this), "WSDualHttpBinding_ICommunication");
      (client as ICommunicationObject).Faulted += new EventHandler(IsChannelFaulted);
   }

   void IsChannelFaulted(object sender, EventArgs e)
   {
       (sender as ICommunicationObject).Abort();
       if (sender is ICommunication)
       {
            client = new CommunicationClient(new InstanceContext(this), "WSDualHttpBinding_ICommunication");
        }
     }
}

So da ja alle 10 Minuten bei Inaktivität der Channel gekillt wird dachte ich mir ich fang das ganze ab, erstell mir einfach eine neue Instanz und kann lustig weiter mit dem Service blubbern. Klappt auch alles soweit Problem ist das die ganzen Controls anscheinend einem anderen Thread gehören.

Nun verstehe ich nicht warum, da der Mainthread ja der gleiche bleibt und dieser als einziges etwas mit den Controls zu tun hat. Selbst die ihm bekannte Service Instanz ist die gleiche. Lediglich client wird neu gesetzt.

Wieso also sagt er mir das die Controls im Besitz eines anderen Threads sind?

17.02.2011 - 12:26 Uhr

Danke herbivore,

ich muss gestehen ich wüsste nicht wo ich das machen sollte. Meinst du beim Dekodieren?

        private void CreateImagePreviewAndShow(Task task)
        {
            try
            {
                foreach (string filename in task.message)
                {
                    List<BitmapSource> imageList = new List<BitmapSource>();
                    TiffBitmapDecoder decoder = DecodeImage(task, filename);

                    CreateListOfClones(imageList, decoder);
                    CreateTabItemsWithCloneList(filename, imageList);
                }
                tabControl.SelectedItem = tabControl.Items.GetItemAt(0);
            }
            catch (Exception)
            {
                ShowProcessingErrorBox();
            }
        }

        private static void ShowProcessingErrorBox()
        {
            MessageBox.Show(...);
        }

        private void CreateTabItemsWithCloneList(string filename, List<BitmapSource> imageList)
        {
            if (LayoutDirection == Direction.HORIZONTAL)
            {
                CreateHorizontalImageControl(filename, imageList);
            }
            else
            {
                CreateVerticalImageControl(filename, imageList);
            }
        }

        private void CreateVerticalImageControl(string filename, List<BitmapSource> imageList)
        {
            using (ImageShowPreviewVertical newImageShow = new ImageShowPreviewVertical())
            {
                newImageShow.newImage(imageList);
                tabControl.Items.Add(new TabItem()
                {
                    Header = filename.Replace(".TIF", ""),
                    Content = newImageShow
                });
            }
        }

        private void CreateHorizontalImageControl(string filename, List<BitmapSource> imageList)
        {
            using (ImageShowPreviewHorizontal newImageShow = new ImageShowPreviewHorizontal())
            {
                newImageShow.newImage(imageList);
                tabControl.Items.Add(new TabItem()
                {
                    Header = filename.Replace(".TIF", ""),
                    Content = newImageShow
                });
            }
        }

        private static void CreateListOfClones(List<BitmapSource> imageList, TiffBitmapDecoder decoder)
        {
            foreach (BitmapSource bitmapSource in decoder.Frames)
            {
                imageList.Add(bitmapSource.Clone());
            }
        }

        private static TiffBitmapDecoder DecodeImage(Task task, string filename)
        {
                Stream imageStreamSource = new FileStream(task.path + filename, FileMode.Open, FileAccess.Read, FileShare.Read);
                TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.IgnoreColorProfile, BitmapCacheOption.OnDemand);
                return decoder;
        }

Vielleicht findet ja jemand einen ruhigen Moment und kann kurz drüber sehen und vielleicht ein paar Tipps geben. Der Fehler kann ja auch an einer anderen Stelle liegen an die atm garnicht denke.

17.02.2011 - 10:21 Uhr

Hallo,

habe eine kurze Frage. Ich nutze den TiffBitmapDecoder um ein Multipage Tiff aus einander zubröseln. Die jeweiligen Bilder packe ich in eine Listbox. Die wieder rum in ein Tabitem. Problem ist das dass ganze etwas lahm ist. Heißt wenn ich das Tab anklicke braucht er etwa 0.5 Sekunden bis das ganze geöffnet ist.

Das ganze sollte aber möglichst ohne merkliche Verzögerungen von statten gehen, da es eine zeitkritische Client Server Applikation ist.

Stream imageStreamSource = new FileStream(task.path + filename, FileMode.Open, FileAccess.Read, FileShare.Read);
TiffBitmapDecoder TiffDecoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
return TiffDecoder;

Mit den Options kann ich das ganze zwar verlagern, sprich entweder ist er beim Öffnen des Tabs langsam oder beim Erstellen. Sollte aber nach Möglichkeit beides schnell sein. Gibts da vielleicht noch einen Trick um das ganze etwas aufzumotzen?

14.02.2011 - 16:24 Uhr

Projekt bereinigen und neu erstellen. Vielleicht hilft es.

11.02.2011 - 11:10 Uhr

Dank deiner Hilfe konnte ich es endlich lösen. Deine Vorschläge haben leider nicht funktioniert aber dadurch kam ich auf die Idee mir von dem Bild einfach mal einen Klon zu erstellen. Dieser ist für andere Thread bearbeitbar.

Übrigens das erste mal das ich die Clone Funktion wirklich sinnvoll nutzen konnte.

Warum Freeze in diesem Zusammenhang nicht funktioniert verstehe ich wieder rum nicht. Aber das spielt ja auch keine Rolle mehr.

Danke xxx

11.02.2011 - 10:22 Uhr

Hab ich eben auch probiert und wollte gerade mein Post editieren 😃

Nein leider auch keine Änderung. Wie kommt er denn überhaupt auf die Idee er müsse das Property auf das Image Objekt anwenden? Ist mir echt schleierhaft. Mein Computer entwickelt ein Bewusstsein 😛

11.02.2011 - 10:04 Uhr

Leider auch gleiches Problem.

Kann es davon kommen das ich ein Binding mache? Eher nicht oder?