C# Delegaten/Invoke/Thread/Backgroundworker?

Huhu,

bin aktuell am rumexperimentieren, da ich es am lernen bin. Dieses Test Form hat nur 2 Dinge die es machen soll.

  1. Das Form Load wird mit einem Label gestartet um den Spieler zu begrüßen. Nach 2 bzw 3 Sekunden soll dass label unsichtbar werden mithilfe eines Backgroundworkes und delegaten. Alles startet normal. Nach den besagten paar Sekunden wirft er mir eine exeption. Als Grund nennt er mir immer das label1. Meine Vermutung ist, dass label 1 ja bereits Form1 Thread läuft und daher nicht mehr geändert werden kann über einen Backgroundworker.

Die Exeption lautet : Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement label1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."

  1. Der zweite Punkt wäre, dass bei einem Button click ein Fenster aufgehen soll und sich nach ein paar Sekunden wieder schließen soll. Das tut es auch. Drücke ich aber nochmal den Button, wirft er mir diese Exeption: System.ObjectDisposedException: "Auf das verworfene Objekt kann nicht zugegriffen werden.Objektname: "Skynet"."

Hier ist der Code:

Für den Kenner ist das bestimmt alles Kraut und Ruben. Kurz: Ein Chaos. Aber aktuell ist es eher Try and Error :)

 public partial class Form1 : Form

  {

    public delegate void invokeDelegate();

    //Backgroundworker wird initialisiert

    public BackgroundWorker arbeiter = new BackgroundWorker();

    public BackgroundWorker arbeiter2 = new BackgroundWorker();

    //Delegaten

    public delegate void deleWorker (BackgroundWorker a);

    public delegate void gruss(BackgroundWorker b);

    //Begrüßungsfenster

    Skynet hello = new Skynet();

    //Zeigt Skynet Fenster an

    public void Show()

    {

       hello.Show();

        Thread.Sleep(3000);

        this.hello.Close();

        hello.Dispose();

    }

    //Willkommensgruß wird für 2 Sekunden angezeigt

    private void Willkommensgruss(Label a)

    {

      a.Text = "Willkommen, Fremder.";

      Thread.Sleep(2000);

        }

    public Form1()

    {

      InitalizeComponent();

      arbeiter.DoWork += backgroundWorker1_DoWork;

      arbeiter2.DoWork += backgroundWorker2_DoWork;

      Skynet hello = new Skynet();

         }

    private void Form1_Load(object sender, EventArgs e)

    {

      //delegate

      gruss hallo = new gruss(backgroundWorker2.RunWorkerAsync);

        hallo.Invoke(backgroundWorker2);

    }

    //Öffnet Skynet Fenster

    private void button2_Click(object sender, EventArgs e)

    {

      deleWorker test = new deleWorker(backgroundWorker1.RunWorkerAsync);

      test.Invoke(backgroundWorker1);

    }

    //Backgroundworker 1

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

    {

     Show();    

    }

    //Backgroundworker 2

    private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)

    {

    Willkommensgruss(label1);

    }

  }

}

Computer, programmieren, C Sharp, Visual Studio
C# IBAN "Rechner": Wie kann ich die IBAN in BLZ und Konto-Nr. zerteilen?

Hallo,

ich programmiere gerade eine Anwendung, die, wenn man BLZ und Konto-Nr eingibt, die IBAN "errechnet". Jetzt habe ich die IBAN berechnet, will aber, dass bei dem tabControl bei "IBAN zerteilen" die "errechnete" IBAN vom IBAN generieren Tab dort bei der IBAN-Textbox angezeigt wird und wenn ich auch den zerteilen Button anklicke, er mir die BLZ und Konto-Nr zurückgibt. Also genau umgekehrt.

Thx.

Hier der bisher bestehende Code:

public void buttonGenerieren_Click(object sender, EventArgs e){ 
   string knr, blz, ergebnis;
   knr = textBoxKontoNrGenerieren.Text;
   blz = textBoxBlzGenerieren.Text;
   double num; 
	
   if ((double.TryParse(knr, out num)) && (double.TryParse(blz, out num))) 
   {	
	ergebnis = CreateIBAN("DE", blz, knr) 
	textBoxIbanGenerieren.Text = ergebnis;
   } 
   else 
   {
	textBoxKontoNrGenerieren.Text = "";
	textBoxBlzGenerieren.Text = "";
   }
}

string CreateIBAN(string lkz, string blz, string kntnr, bool groupedReturn = true) 
{
    string bban = string.Empty;
    lkz = lkz.ToUpper();

    switch(lkz) 
    { 
	case "AT": 
        { 
	   bban = blz.PadLeft(5, '0') + kntnr.PadLeft(11, '0');
	} 
	  break;
	case "DE": 
        {
	   bban = blz.PadLeft(0, '0') + kntnr.PadLeft(10, '0');
	}
	  break;
	case "CH": 
        {
	   bban = blz.PadLeft(5, '0') + kntnr.PadLeft(12, '0');
	}
	  break;
    }
	
    string sum = bban + lkz.Aggregate("", (current, c) => current + (c - 55).ToString()) + "00";
    var d = decimal.Parse(sum);
    var checksum = 98 - (d % 97);
    string iban = lkz + checksum.ToString().PadLeft(2, '0') + bban;
	
    return groupedReturn
      ? iban.Select(c, i) => (i % 4 == 3) ? c + " " : c + "").Aggregate("", (current, c) => current + c) 
      : iban;
}

public void buttonZerteilen_Click(object sender, EventArgs e)
{
    // Was kommt jetzt hier rein?
}
Computer, programmieren, Rechner, C Sharp, IBAN, Visual Studio, source code, Wirtschaft und Finanzen
XML-Datei in Visual Studio 2017/C# einlesen?

Hi, ich bin ein C# anfänger und will eine XML Datei bzw den Text in drei Textboxen (vorname, name, wohnort) einlesen. Es wird aber bei "Vorname", "Name" und "Wohnort" der gesamte InnerText in allen drei Textboxen eingelesen.

Form1.cs Code:

using System;

using System.ComponentModel;

using System.IO;

using System.Windows.Forms;

using System.Xml;

namespace Personen

{

  public partial class form1 : Form

  {

    public form1()

    {

      InitializeComponent();

    }

    private void Form1_Load(object sender, EventArgs e)

    {

    }

    private void open_Click(object sender, EventArgs e)

    {

      OpenFileDialog ofd = new OpenFileDialog();

      ofd.Filter = "Xml-Datei|.xml";

      if (ofd.ShowDialog() == DialogResult.OK)

      {

        XmlDocument doc = new XmlDocument();

        doc.Load("C:\Users\lukas.broemer\Desktop\Lukas Brömer Ausbildung\C# XML Programme\Personen.xml");

        XmlElement root = doc.DocumentElement;

        vorname.Text = root.InnerText;

        name.Text = root.InnerText;

        wohnort.Text = root.InnerText;

         

        textBox1.Text = Path.GetDirectoryName(ofd.FileName);

      }

    }

    private void openFileDialog1_FileOk(object sender, CancelEventArgs e)

    {

    }

  }

Personen.xml Code:

<Person>

<Name>Mustermann</Name>

<Vorname>Max</Vorname>

<Wohnort>München</Wohnort>

</Person>

In der Form1.cs [Design] kann ich die XML-Datei auswählen und einlesen, bei jeder Textbox steht dann "MustermannMaxMünchen". Also bei der Textbox Vorname steht dann "MustermannMaxMünchen" statt "Max", bei Name steht auch "MustermannMaxMünchen" statt "Mustermann" und bei Wohnort steht auch wieder "MustermannMaxMünchen" statt "München".

Irgendwas stimmt bei

  XmlElement root = doc.DocumentElement;

        vorname.Text = root.InnerText;

        name.Text = root.InnerText;

        wohnort.Text = root.InnerText;

nicht.

Er liest den ganzen Text ein und nicht bei jeder Textbox die einzelnen Elemente.

Bitte helft mir. :D

Thx. :D






Computer, programmieren, Anwendung, C Sharp, XML

Meistgelesene Beiträge zum Thema C Sharp