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 Olympiakos25
Thema: Object an Funktion übergeben und wieder benutzen
Am im Forum: Grundlagen von C#

Vielen Dank für die sehr schnelle Antwort!

Damit funktioniert es, bzw. ich stoße auf den nächsten Fehler, weil ich das MainWindow wohl nicht übergeben darf. Mit einem anderen Objekt funktioniert es aber.
Vielen Dank!!!

Thema: Object an Funktion übergeben und wieder benutzen
Am im Forum: Grundlagen von C#

Hallo zusammen!

Ich hänge an einem Problem, welches ich aktuell nicht lösen kann. Vermutlich für die meisten eine Grundlage, aber ich bin noch relativ neu was das programmieren angeht und probiere gerade diverse Dinge aus.
Unter anderem wollte ich mir mal ansehen, wie Ladebalken in WPF funktionieren. Ich habe einige schöne Tutorials im Internet gefunden und habe mir den Code aus einmal mal als Vorlage zum Verständnis genommen.

Es geht um folgenden Abschnitt:


public partial class MainWindow : Window
{
        public MainWindow()
        {
            InitializeComponent();
        }

        private void startWork_Click(object sender, RoutedEventArgs e)
        {
            BackgroundWorker worker = new BackgroundWorker();
            worker.WorkerReportsProgress = true;
            worker.DoWork += worker_DoWork;
            worker.ProgressChanged += worker_ProgressChanged;
            worker.RunWorkerCompleted += worker_RunWorkerCompleted;
            worker.RunWorkerAsync(this);
        }

        private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            throw new NotImplementedException();
        }

        private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            progressBar.Value = e.ProgressPercentage;
        }

        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            MainWindow hauptfenster = sender as MainWindow;

            if (hauptfenster.TextBox1.Text != "")
            {
                   ...........

Es wird also das MainWindows initalisiert und wenn ich dort auf den Button "startWork" drücke wird die Funktion "startWork_Click" ausgeführt.
Diese soll nun mit dem BackgroundWorker die eigentliche Aufgabe auf einen anderen Thread auslagern, damit der Hauptthread (welcher das UI erstellt hat) das UI updaten kann.
Die eigentliche Aufgabe wird dann über:

worker.RunWorkerAsync(this);
gestartet.
Meiner Meinung nach, übergebe ich hier mit "this" das Objekt MainWindow um es auf dem anderen Thread benutzen zu können.
Da ich nur ein "generelles" Objekt übergeben kann, muss ich es als erstes wieder zu einem MainWindow machen.
Wenn ich nun auf "hauptfenster" zugreife, bzw. das Programm ausführe, bekomme ich den folgenden Fehler: "Object reference not set to an instance of an object."

Kann mir da jemand helfen? Es scheint so trivial zu sein, dass ich dazu im Internet nichts finde!?

MainWindow hauptfenster = sender as MainWindow;
Der Befehl müsste eine Instanz vom Objekt erzeugen!?

Vielen Dank im Vorraus!!!
(Ich habe versucht das Problem so genau wie möglich zu beschreiben)