Announcement

Collapse
No announcement yet.

Progressbar aus Klasse heraus ansteuern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Progressbar aus Klasse heraus ansteuern

    hallo,
    ich versuche mich gerade daran Dateien in einer MSSQL Datenbank abzulegen und nutze dabei Filestream auf der MSSQL Seite und streamreader für den Upload in c#.

    Der Upload funktioniert. Wenn ich jedoch eine große Datei Uploade weiss ich nicht wo die Software gerade ist und warte je nach Dateigröße 1 Minuten. Deshalb möchte ich irgendetwas anzeigen.

    Der Upload wird über eine Klasse gemacht. Im Upload habe ich eine Schleife die immer 10 KB Stückchen verarbeitet. Wie kann ich aus der Schleife heraus nach aussen eine Info geben wie weit der Upload ist?

    Ich bin noch Anfänger die Progressbar direkt ansprechen habe ich nicht hinbekommen. Muss das gehen oder geht das nicht?

  • #2
    Ich bin noch Anfänger die Progressbar direkt ansprechen habe ich nicht hinbekommen. Muss das gehen oder geht das nicht?
    Natürlich geht das. Zeig uns kurz deine Schleife und was du genau mit nicht hinbekommen meinst(Fehlermeldung - Progressbar reagiert einfach nicht oder ähnliches)

    Comment


    • #3
      hallo,
      also Schleife

      Code:
      using (SqlFileStream SqlFileStream = new SqlFileStream(Pathname, FSContext, FileAccess.Write))
      {
          const int BufferSize = 10 * 1024;
          byte[] buffer = new byte[BufferSize];
      
          int i;
      // hier würde ich maximum der pBFortschritt definieren
          using (StreamReader sr = new StreamReader(FullFilename))
          {
      
              do
              {
      // und hier die Schritte
                  i = sr.BaseStream.Read(buffer, 0, buffer.Length);
                  SqlFileStream.Write(buffer, 0, buffer.Length);
              } while (i == BufferSize);
          }
      }
      Ich konnte es jetzt soweit eingrenzen dass das Problem ist das ich nicht weiss wie ich aus einer Klasse ein Element auf meinem Form1 anspreche...

      Mit Form1.pBFortschritt.Maximum = 12; kommt der Fehler "Zugriff auf Grund der Sicherheitsebene nicht möglich". Hast du einen Tip woran das liegt oder muss ich mich durchgoogeln?

      Comment


      • #4
        Wenn Du eine eigene Klasse für den FileUpload hast, dann kannst Du aus der ja die Gesamtgröße des Files auslesen (dem Konstruktor z.B. schon den Filenamen übergeben). Die Upload Funktion wirft dann einfach nur noch ein Event jedesmal wenn ein Häppchen hochgelden wird/wurde. Das kannst Du in Deiner Oberfläche Abfragen und weiter verarbeiten. Mache die Schritte nicht zu klein, denn Du musst nach jedem Schritt die Oberfläche neu zeichnen. Wenn die Schritte zu klein sind brauchst Du für das neuzeichnen der Oberfläche VIEL länger als für den Upload der Datei und es wird alles noch langsamer

        In den meisten Fällen tuts übrigens auch ein Marquee Progressbar

        Comment


        • #5
          hallo,
          also jetzt mal ohne mich über die genannten Dinge zu informieren. Event heißt ich spreche die Progressbar nicht direkt aus der Klasse an sondern schalte ein Event zwischen auf das ich mit dem weiterzählen des Progressbar reagiere?

          Ein Marquee Progressbar ist ein Bild das sich bewegt aber nichts mit der tatsächlichen Restdauer zu tun hat?

          Es sollte schon realistisch zeigen wie lange es dauert...

          Comment


          • #6
            Genau, Deine Upload Klasse informiert praktisch die Oberfläche wann sie mit einem Teil fertig ist. Die Oberfläche zeigt das dann an. Der Vorteil daran ist, dass Deine Upload Klasse nichts von der Oberfläche wissen muss. So könntest Du die Upload Klasse später auch an einer anderen Stelle wieder einsetzen.

            Marquee heisst genau das. Kommt eben immer auf die Anforderungen an

            Comment


            • #7
              wenn du vor hast die klasse nur für dieses ein projekt zu verwenden kannst du die progress auch im konstruktor als referenz übergeben.
              Somit kannst du aus der klasse auf die referenz der Progressbar zugreifen. Ist einfacher aber bringt auch im endeffekt mehr nachteile besonders bei der kompatibilität deiner upload klasse.

              Comment


              • #8
                Das ist aber genau das gleiche als wie wenn ich ein Event feuere, nur dass dann meine Upload Klasse nicht mehr von der Oberfläche abhängig ist

                Comment


                • #9
                  Wollte es nur der vollständigkeit halber mal hinschreiben.

                  Comment

                  Working...
                  X