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 digi333
Thema: Wie kann ich MouseEventArgs außerhalb der Form abfangen?
Am im Forum: GUI: Windows-Forms

Ich möchte gerne eine Color Picker bauen. Dieser wird durch einen Timer aktualisiert und soll beendet werden durch ein Mouse Button. Mouse Button Events bekomme ich jedoch nur innerhalb einer Form, eines Button oder Ähnlichem. Ich möchte aber, das die Aktualisierung außerhalb der Form unterbrochen wird. Ich könnte irgendwo auf den Hintergrund von Windows klicken und der Timer wird beendet... aber wie?


public Form1()
        {
            InitializeComponent();
            timer1.Start();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            Graphics myGraphics = this.CreateGraphics();
            Bitmap memoryImage = new Bitmap(1, 1, myGraphics);
            Graphics memoryGraphics = Graphics.FromImage(memoryImage);
            memoryGraphics.CopyFromScreen(Cursor.Position.X, Cursor.Position.Y, 0, 0, new Size(1, 1));

            Color color = memoryImage.GetPixel(0, 0);
            label1.Text = color.ToString();
        }

Thema: Excel Add-In verteilen
Am im Forum: Office-Technologien

Einen Zertifikatsserver besitzen wir nicht. Gibt es kostenloses Zertifikat im Netz für viele Nutzer?

Thema: Excel Add-In verteilen
Am im Forum: Office-Technologien

Ich habe ein kleines Excel Add-In (C#) geschrieben in VS2015, jedoch kann ich es nicht meinem Kollegen geben, da bei der Installation ein Problem mit Zertifikaten existiert. Besser gesagt, ich weiß nicht wie man das macht. Ich schätze mal es liegt an der Signierung und "ClickOnce.Manifeste signieren". Kann mir bitte jemand erklären was die nächsten Schritte sind damit es bei meinem Kollegen funktioniert. Danke

Thema: [erledigt] Permanentes Add-In in Excel
Am im Forum: Office-Technologien

Das war mein Fehler... Ich habe auf "Excel Add-In mit Template" geklickt. Damit war das Add-in nur für das eine Dokument verwendbar. Wer lesen kann, ist klar im Vorteil. Danke

Thema: [erledigt] Permanentes Add-In in Excel
Am im Forum: Office-Technologien

Ich weiß leider gerade nicht mit welchen Begriffen ich suchen soll. Ich möchte gerne ein Add-In in Excel haben, welches dauerhaft vorhanden ist. Nutze ich VS und VSTO erzeugt es mir ein Add-In für eine Datei. Sprich... diese Datei öffnen und das kompilierte Add-In ist vorhanden. Ich möchte aber das Add-In dauerhaft installieren für Excel... aber wie?

Thema: Unterschied WinForm- und Konsolenanwendung bei API Abfrage
Am im Forum: Rund um die Programmierung

Fehler gefunden... Das Zauberwort heißt "async" und "await"


private async void get_Button_Click(object sender, EventArgs e)
        {
            try
            {
                await Run("google");
            }
            catch (AggregateException ex)
            {
                System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
            }    
        }

Thema: Unterschied WinForm- und Konsolenanwendung bei API Abfrage
Am im Forum: Rund um die Programmierung

Ich möchte einen Youtube Downloader bauen mit der Youtube API. Der Beispielcode funktioniert in der Konsolenanwendung auch sehr gut, jedoch möchte ich das eher in einer WinForm verwenden. Okay... Button genommen und verlinkte Klasse aufgerufen... Funktioniert teilweise... wenn er die Anfrage schickt, passiert nichts und er bleibt stehen.


 static void Main(string[] args)
        {
            Search s = new Search();
            s.Searchword("Goole");
        }
        [STAThread]
        public void Searchword(string searchword)
        {
            try
            {
                new Search().Run(searchword).Wait();
            }
            catch (AggregateException ex)
            {
                foreach (var e in ex.InnerExceptions)
                {
                    System.Diagnostics.Debug.WriteLine("Error: " + e.Message);
                }
            }
        }

        public async Task Run(string searchword)
        {
            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                ApiKey = "mein Geheimnis",
                ApplicationName = this.GetType().ToString()// "YoutubeApiSearch.Search" //
            });

            var searchListRequest = youtubeService.Search.List("snippet");
            searchListRequest.Type = "video";
            searchListRequest.Q = searchword; // Replace with your search term.
            searchListRequest.VideoLicense = SearchResource.ListRequest.VideoLicenseEnum.CreativeCommon;
            searchListRequest.MaxResults = 50;

            // Call the search.list method to retrieve results matching the specified query term.
            var searchListResponse = await searchListRequest.ExecuteAsync();
            ....

In der Konsolenanwendung geht er problemlos über die letzte Zeile und empfängt Ergebnisse. Die WinForm-Anwenung ruft identisch die Klasse auf, kommt aber über die letzte Zeile nicht drüber weg.


private void get_Button_Click(object sender, EventArgs e)
        {
            Search s = new Search();
            s.Searchword("Google");

Ich muss gestehen, dass ich nicht mal eine Idee habe was der Unterschied ist.

Thema: ToolStrip überlagert die ListView im Panel
Am im Forum: GUI: Windows-Forms

Egal in welcher Reihenfolge ich die beiden anspreche. Das ListView schiebtr sich immer unter den ToolStrip. Ein extra Panel für den ToolStrip finde ich nicht so gut.

Thema: ToolStrip überlagert die ListView im Panel
Am im Forum: GUI: Windows-Forms

Ich habe ein Panel mit einem ToolStrip (Dock: Top) und ein ListView (Dock: Fill). Das hat jedoch die Auswirkung, dass das ListView verdeckt ist. Okay... das ist ja der Sinn von Fill, aber ich wollte eigentlich eine Art von Fill haben, aber das ToolStrip sollte nebeneinander sein.

Thema: Bitmaps effizient(!) als Video abspielen
Am im Forum: Grafik und Sound

Der "Engpass" liegt beim Zeichnen in das Panel. Bei mir also in der Funktion DrawPanel(). Ziehe ich es größer wird das Abspielen sehr langsam. Ein sehr kleines Panel (400x200) schafft 12ms pro Frame. Bei DVD-Auflösung werden es dann schon 50ms pro Frame.

Thema: Bitmaps effizient(!) als Video abspielen
Am im Forum: Grafik und Sound

Ich bin scheinbar bei DirectX etwas überfordert. Kann mir vielleicht jemand etwas helfen wie ich das Folgende in einer "Box" zeichne?


IntPtr bgr;
bgr = new IntPtr(ff.decodeNextFrame());
byte[] buffer = new byte[3*ff.height()*ff.width()];

Thema: Bitmaps effizient(!) als Video abspielen
Am im Forum: Grafik und Sound

Gibt es etwas besseres als ein Panel? Gibt es etwas in DirectX? Die Geschwindigkeit des Panels ist abhängig von seiner Größe. Ein kleines Panel ist sehr schnell bei der Darstellung, aber ein großes Panel wird dagegen schon sehr langsam.

Thema: Bitmaps effizient(!) als Video abspielen
Am im Forum: Grafik und Sound

Ich suche eine schnellere Variante als meine aktuelle Lösung für das Problem ein C++ Pointer eines Bildes (FFMPEG) in einer Oberfläche (Panel) darzustellen. Vielleicht habt ihr ja eine Idee.

Meine Variante:


IntPtr bgr;
bgr = new IntPtr(ff.decodeNextFrame());
bgr = new IntPtr(ff.decodeNextFrame());
byte[] buffer = new byte[3*ff.height()*ff.width()];
Marshal.Copy(bgr, buffer, 0, buffer.Length);
Bitmap tmp_bmp = BGR2Bitmap(ff.height(), ff.width(), buffer);
DrawBitmap(tmp_bmp, panel_player);




public static Bitmap BGR2Bitmap(int height, int width, byte[] bgr)
        {
            if (height ≤ 0 || width ≤ 0)
                return new Bitmap(1, 1);

            Bitmap toreturn = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            Rectangle rect = new Rectangle(0, 0, width, height);
            System.Drawing.Imaging.BitmapData bmpData =
                toreturn.LockBits(rect, ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
            IntPtr ptr = bmpData.Scan0;
            int bytes = bmpData.Stride * toreturn.Height;

            if (bgr.Length == bytes)
            {
                Marshal.Copy(bgr, 0, ptr, bytes);
            }
            else
            {
                byte[] retBGR = new byte[bytes];
                for (int i = 0; i < toreturn.Height; i++)
                    Array.Copy(bgr, i * 3 * toreturn.Width, retBGR, i * bmpData.Stride, toreturn.Width * 3);
                System.Runtime.InteropServices.Marshal.Copy(retBGR, 0, ptr, bytes);

            }
            toreturn.UnlockBits(bmpData);
            return toreturn;
        }

        private void DrawBitmap(System.Drawing.Image bmp, Panel panel)
        {
            Graphics g = panel.CreateGraphics();
            g.DrawImage(bmp, 0, 0, panel_player.Width, panel_player.Height);
        }

Thema: Dictionary<string, int> performant deserialisieren/laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Wow! Genau das habe ich gesucht... ein hoch auf witte (werde dich in meine Nachtgebete einschließen). :)

Time elapsed: 00:00:06.2798098
Dictionary Count: 5131062

Thema: Dictionary<string, int> performant deserialisieren/laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Mit der Levenshtein-Distanz... welche angibt wie viele Schreiboperationen man benötigt um ein Wort in ein anderes Wort aus der Datenbank (DWORDS) zu ändern.

Levenshtein-Distanz

Thema: Dictionary<string, int> performant deserialisieren/laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das ist die Wahrscheinlichkeit (Häufigkeit) jedes Wortes. Wenn mehrere Kandidaten zur Korrektur zur Verfügung stehen, nehme das Wort mit der größten Wahrscheinlichkeit.

Thema: Dictionary<string, int> performant deserialisieren/laden
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich schreibe gerade einen Spell-Checker (Rechtschreibprüfung) aus wissenschaftlichen Gründen (besitzt besonders viele Alternative Namen von Städten). Das Programm funktioniert auch wie erwartet sehr gut, aber beim Programm-Start wird das Wörterbuch als Dictionary<string, int> geladen. Leider dauert das jedoch sehr lang und daher meine Frage... kennt ihr eine schnellere Möglichkeit dieses Wörterbuch als Dictionary zu deserialisieren?


           Dictionary<string, int> dict_words = null;
          ....

            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();

            if (DWORDS == null)
            {
                BinaryFormatter inF = new BinaryFormatter();
                using (FileStream fs = new FileStream("spellchecker.dat", FileMode.Open))
                {
                    DWORDS = (Dictionary<string, int>)inF.Deserialize(fs);
                }
            }
            stopwatch.Stop();
            System.Diagnostics.Debug.WriteLine("Time elapsed: {0}", stopwatch.Elapsed);
            System.Diagnostics.Debug.WriteLine("Dictionary Count: {0}", DWORDS.Count());

Ausgabe:
Time elapsed: 00:09:02.9263397
Dictionary Count: 5131062

PS.: Ich würde auch zu eigenen Tests die Datei zur Verfügung stellen.

Thema: Deserialisieren: RAM wird voll
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Die Antwort für mein Problem lag in einem kleinen Nebensatz von Abt.

die Variable "blocks" wird mit keiner anderen Methode weiter verarbeitet außer mit Array.Sort(). Die Funktion sieht jetzt so aus und der Speicher füllt sich zwar noch, aber beim erreichen des Maximums wird er relativ gut leer geräumt... Taskmanager sieht beim RAM dadurch aus wie Berg- und Talfahrt (das ist okay). Die Exception kommt erst mal nicht (aber das Programm brauch ja noch 5 Stunden).


public static void Deserialisiere<T>(out T objekt, string path)
        {
            BinaryFormatter binF = new BinaryFormatter();
            using (FileStream fs = new FileStream(path, FileMode.Open))
            {
                objekt = (T) binF.Deserialize(fs);
                fs.Close();
            }
        }

Den Profiler hab ich noch nicht verstanden. Ich dachte, er könnte mir ausgeben, welche Variable gerade wieviel Speicher benötigt.

Thema: Deserialisieren: RAM wird voll
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Entschuldigt bitte die fehlende Information, dass das Programm in eine Exception läuft.

Ich konkretisiere meine Frage. Kann es sein, dass das Programm mit diesem Code-Fragment innerhalb der FOR-Schleife mit Hilfe der Funktion Deserialisiere() immer wieder ein neues Objekt erzeugt welches beim Durchlauf nicht wieder abgeräumt wird? Würdet ihr die Funktion genauso schreiben?

Thema: Deserialisieren: RAM wird voll
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielen Dank für die "Belehrung". Ich erwarte nicht, dass die GC sofort aufräumt. Es ist jedoch seltsam, wenn ein Programm rasend ansteigt (12 GB Ram Unterschied) und es einfach in die Exception rennt. Man möchte dann doch versuchen das Programm zu retten und die nicht benötigte Speicherbelegung wieder zurück zu erhalten was der Grund für das "Dispose" und das "GC.Collect".

Mit dem Profiler kenne ich mich noch nicht aus, aber ich werde es mir genauer anschauen.

Meine Grundidee war es Code Fragmente zu zeigen, Problembeseitigungen zu zeigen und zu fragen ob ich ein Grundproblem in "Deserialisieren" hab.

Thema: Deserialisieren: RAM wird voll
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

"GC.Collect();" hab ich eingebaut, da ich hoffte, dass ich das Speicherproblem beseitigen kann. Das Programm beendet nicht, da die FOR-Schleife irgendwann eine Out-Of-Memory Exception verursacht. Wenn ich mir den Taskmanager anschaue, wächst die Speicherbelegung kontinuierlich mit der Größe der deserialisierten Datei. Bedeutet: Deserialisiere Datei (40 MB) -> Arbeitsspeicher steigt an auf ca. 40 MB (Okay) -> mache irgendwas mit "blocks" -> Gehe zur nächsten Datei (auch wieder 40 MB)

Wenn die Garbage Collection richtig funktionieren würde, würde sie durch schließen der Klammer der FOR-Schleife verstehen, dass die ersten 40 MB der ersten Datei nicht mehr benötigt wird und "blocks" im Arbeitsspeicher wieder frei gibt. Das sieht aber nicht so aus. Es wächst kontinuierlich um 40 MB bis zur Exception.

Thema: Deserialisieren: RAM wird voll
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hab ein Problem mit einer Methode und befürchte, dass der Speicher nicht frei geräumt wird, da der Arbeitsspeicher richtig voll wird mit jedem Durchlauf der Variablen der FOR-Schleife. Ideen?


...
for(...)
{
   string[] blocks;
   Deserialisiere(out blocks, prefix + "_classes.string[]");
   ...
   blocks = null;
   GC.Collect();

}
...


public static void Deserialisiere<T>(out T objekt, string path)
        {
            BinaryFormatter binF = new BinaryFormatter();
            FileStream fs = new FileStream(path, FileMode.Open);
            objekt = (T)binF.Deserialize(fs);
            fs.Close();
            fs.Dispose();
        }

Thema: System.IndexOutOfRangeException beim Serialisieren (Mögliche E/A-Racebedingung)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat von Abt
Ich versteh nich, was das eine mit dem anderen zutun hat.
MrSparkles Einwand sagt eigentlich alles. Denn effizient ist Dein Vorhaben nicht; im Gegenteil: es ist dazu fehleranfällig.

Nein... tut es nicht. Es ist jediglich ein nicht auf die Frage bezogener Hinweis.

Warum ich so viele Floats brauche hat tatsächlich mit einer komplizierten zueinander gewichtungsabhängigen Berechnung zu tun, bei der die Daten komplett und gleichzeitig verfügbar sein müssen. Die Ergebnisse möchte ich daher serialisieren um weitere Gewichtungen vornehmen zu können. Egal. Darüber solltet ihr euch aber keinen Kopf machen.
Zitat von MrSparkle
ich kann das ganze auch nicht nachvollziehen. Wie kommst du überhaupt darauf, daß es am Speicher liegt? Das Bild in deinem ersten Beitrag zeigt keine SystemOutOfMemoryException, sondern eine IndexOutOfRangeException. Woher die kommt, kann man ohne eine genauere Beschreibung von dir und ohne Code nicht sagen. Aber der StackTrace sollte dich auf die richtige Spur bringen. Siehe auch [Artikel] Debugger: Wie verwende ich den von Visual Studio?.

Speicher? Wer sagte das es daran liegt. Es liegt im Speicher aber läßt sich nicht speichern auf Festplatte.

Danke für die Hinweise, aber bezogen auf die Fragen waren sie nicht. Standardantwort in diesem Forum ist immer "such irgendwo in der HOW-TO-XYZ" oder "richtig Debuggen"... dann schreibt doch besser nichts.

Thema: System.IndexOutOfRangeException beim Serialisieren (Mögliche E/A-Racebedingung)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Die Daten sind dort etwas kleiner und ich greife mit keinem anderen Thread auf das Objekt oder die Festplatte zu.

Mich wundert halt nur, dass ich die Daten im Speicher habe, aber diese nicht auf die Festplatte schreiben kann. Seltsam!

Thema: System.IndexOutOfRangeException beim Serialisieren (Mögliche E/A-Racebedingung)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Das Zauberwort heißt "Big Data"

Thema: System.IndexOutOfRangeException beim Serialisieren (Mögliche E/A-Racebedingung)
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich habe das folgende Problem beim serialisieren einer eigenen Klasse. Exakt dieses Objekt kann ich nicht serialisieren, jedoch andere Werte mit der gleichen Klasse funktionieren.

Die Fehlermeldung kann ich selber nicht ganz deuten. Was soll ich machen oder warum kann ich das Objekt aus dem Speicher nicht auf die Festplatte speichern?

Nutze VS 2013 mit .Net Framework 4.5

Thema: Größeres Array verwenden als der INT-Laufindex zuläßt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hab das Projekt in VS2012 mit x64 und in der "App.config" folgendes eingetragen.


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <runtime>
    <gcAllowVeryLargeObjects enabled="true" />
  </runtime>
</configuration>

Im Hauptprogramm steht nicht mehr als...


long t = 3679203411;
float[] a = new float[t];

Dennoch kommt eine
Fehler
OverflowException nicht behandelt

Thema: Größeres Array verwenden als der INT-Laufindex zuläßt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hab 32 GB und noch eine 512 GB SSD Festplatte zum auslagern. Sollte reichen. Wie sieht eine eigene Array-Klasse aus mit einem long als Index-Variable?

Thema: Größeres Array verwenden als der INT-Laufindex zuläßt
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich brauche ein Float-Array von mehr als 2^31 Zellen, aber wie?


int cells = Rows*Columns; // 17001*216411=3679203411
float[] f = new float[cells];

Man sieht schnell, dass cells größer ist als der Wertebereich von Integer.

Thema: VS: Selbstdefinierte Autovervollständigung für wiederkehrende Codeblöcke
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hab gerade gesehen das Resharper ein Template Manager hat der genau das macht was ich suche.