Laden...

Probleme mit Thread/GUI

Erstellt von ZeroQool vor 16 Jahren Letzter Beitrag vor 16 Jahren 1.369 Views
Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 16 Jahren
Probleme mit Thread/GUI

Hallo, ich weiss, dass das hier schon mehrmals besprochen worden ist. Habe auch alles gelesen u gegoogelt, aber so wirklich brachte mich das der Lösung nicht näher.


    private bool Neu_Import_VA()
    {
      //ChB_VA_aktiv.Checked = true;
      
      //DatePickModFrom.Value = DateTime.Now.AddDays(-14);
      //DatePickModTo.Value   = DateTime.Now;

      try
      {
        GetSellerTransactionsCall apicall = new GetSellerTransactionsCall(Context);
        apicall.DetailLevelList.Add(DetailLevelCodeType.ReturnAll);
        apicall.DetailLevelList.Add(DetailLevelCodeType.ItemReturnDescription);
        apicall.DetailLevelList.Add(DetailLevelCodeType.ItemReturnAttributes);
        apicall.DetailLevelList.Add(DetailLevelCodeType.ItemReturnCategories);
        apicall.Pagination = new PaginationType();
        apicall.Pagination.EntriesPerPage = 200;
        apicall.Pagination.PageNumber = 1;

        int PageIndex;
        AnzahlNeueDS = 0;
        for (PageIndex = 1; PageIndex <= 2; PageIndex++)
        {
          apicall.Pagination.PageNumber = PageIndex;
          TransactionTypeCollection transactions = apicall.GetSellerTransactions(DatePickModFrom.Value, DatePickModTo.Value);
          Application.DoEvents();
          foreach (TransactionType trans in transactions)
          {
            frm_Anmeldung.Connection.Close();
            frm_Anmeldung.Command.CommandType = CommandType.Text;
            frm_Anmeldung.Command.CommandText = SQLBefehle.cSelectStFrom + Felddefinitionen.Tabelle.eBay_VerkaufteArtikel.ctbleBay_VA + SQLBefehle.Where +
                                                Felddefinitionen. Tabelle.eBay_VerkaufteArtikel.cvCh20_AuktionsNr + SQLBefehle.Gleich + "'" + trans.Item.ItemID + "'";

            try
            {
              frm_Anmeldung.Command.Connection.Open();
              int count = 0;
              SqlDataReader dr = frm_Anmeldung.Command.ExecuteReader();
              while (dr.Read())
              {
                count++;
              }
              dr.Close();
              if (count == 0)
              {
                //Splittung Vorname u Nachname
                if (trans.Buyer.BuyerInfo.ShippingAddress.Name == null)
                {
                  trans.Buyer.BuyerInfo.ShippingAddress.Name = "";
                }
                try
                {
                  if (trans.Buyer.BuyerInfo.ShippingAddress.Name != "")
                  {
                    if (trans.Buyer.BuyerInfo.ShippingAddress.Name.IndexOf(" ") > 0)
                    {
                      TmpVorname = trans.Buyer.BuyerInfo.ShippingAddress.Name.Substring(0, trans.Buyer.BuyerInfo.ShippingAddress.Name.IndexOf(" "));
                      if (Char.IsUpper(TmpVorname, 0) == false)
                      {
                        TmpVorname = TmpVorname.Substring(0, 1).ToUpper() + TmpVorname.Substring(1, TmpVorname.Length - 1);
                      }

                      TmpNachname = trans.Buyer.BuyerInfo.ShippingAddress.Name.Substring (trans.Buyer.BuyerInfo.ShippingAddress.Name.IndexOf(" ") + 1, trans.Buyer.BuyerInfo.ShippingAddress.Name.Length - TmpVorname.Length - 1);
                      if (Char.IsUpper(TmpNachname, 0) == false)
                      {
                        TmpNachname = TmpNachname.Substring(0, 1).ToUpper() + TmpNachname.Substring(1, TmpNachname.Length - 1);
                      }
                    }
                  }
                }
                catch (Exception Fehlermeldung)
                {
                  RTB_Log.AppendText(DateTime.Now.ToString() + "(VA Import) Fehler: " + Fehlermeldung.Message + "\n");
                  RTB_Log.ScrollToCaret();
                  return false;
                }
                RTB_Log.AppendText(DateTime.Now.ToString() + "(VA Import) Fehler: " + "\n");
                Datenbank.SQLDatenSpeichern (Datenbank.GetProcNameInsUpd (Felddefinitionen.Tabelle.eBay_VerkaufteArtikel.ctbleBay_VA),
                new string[] {Datenbank.Gl_neuerDS,
                              trans.Item.ItemID,
                              "0",
                              trans.Item.Title,
                              trans.Item.SubTitle,
                              trans.Item.Description,
                              trans.QuantityPurchased.ToString(), 
                              trans.Item.Currency.ToString(),
                              trans.TransactionPrice.Value.ToString(),
                              cl_Tools.DatumSortieren(Convert.ToString(trans.CreatedDate.ToLocalTime())),
                              cl_Tools.ebayZeitSortieren(Convert.ToString(trans.CreatedDate.ToLocalTime())),
                              trans.Buyer.UserID,
                              trans.Buyer.Email,
                              TmpVorname + " " + TmpNachname,
                              trans.Buyer.BuyerInfo.ShippingAddress.CompanyName,
                              trans.Buyer.BuyerInfo.ShippingAddress.Street1,
                              trans.Buyer.BuyerInfo.ShippingAddress.Street2,
                              trans.Buyer.BuyerInfo.ShippingAddress.PostalCode,
                              trans.Buyer.BuyerInfo.ShippingAddress.CityName,
                              trans.Buyer.BuyerInfo.ShippingAddress.CountryName,
                              trans.Buyer.BuyerInfo.ShippingAddress.StateOrProvince,
                              "", 
                              trans.ShippingServiceSelected.ShippingServiceCost.Value.ToString(),
                              "",
                              "",
                              DateTime.Now.ToString()});

                AnzahlNeueDS++;
              }
            }
            catch (Exception Fehlermeldung)
            {
              RTB_Log.AppendText(DateTime.Now.ToString() + "(VA Import) Fehler: " + Fehlermeldung.Message + "\n");
              RTB_Log.ScrollToCaret();
              return false;
            }
          }
        }
      }
      catch (Exception Fehlermeldung)
      {
        RTB_Log.AppendText(DateTime.Now.ToString() + "(VA Import) Fehler: " + Fehlermeldung.Message + "\n");
        RTB_Log.ScrollToCaret();
        return false;
      }

      finally
      {
        //ChB_VA_aktiv.Checked = false;
      }
      return true;
    }

Aufruf:


        ThreadStart asyncCall = delegate
        {
          RTB_Log.Invoke(new MethodInvoker(Neu_Import_VA()));
        };

        Thread t = new Thread(asyncCall);
        t.Start();

Fehler= Falscher Rückgabetyp

Dann habe ich es mal über den Backgroundworker versucht, aber dort habe ich das Problem falls eine Exception kommt kann er nicht in die RichTextBox reinschreiben. Vllt weiß jemand etwas mehr?! Thx im voraus

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo ZeroQool,

erstmal zwei Klammern waren zu viel:

RTB_Log.Invoke(new MethodInvoker(Neu_Import_VA));

und dann muss entweder Neu_Import_VA void als Rückgabetype haben oder du musst statt MethodeInvoker einen Delegattyp verwenden, der bool als Rückgabewert hat. Jedenfalls muss natürlich die Signatur des Delegattypen und der Methdode übereinstimmen.

herbivore

Z
ZeroQool Themenstarter:in
322 Beiträge seit 2006
vor 16 Jahren

THX herbivore...so, habe alles geändert, aber meine GUI friert nun beim Import ein u nachdem der Import fertig ist, wird die GUI wieder "freigegeben" Komisch....

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo ZeroQool,

naja, du startest einen Thread, der nichts anders macht, als dem GUI-Thread zu sagen, er soll die gesamte Aktion ausführen. Also läuft alles sofort und vollständig im GUI Thread. Du musst es schon so machen, wie in [FAQ] Warum blockiert mein GUI? beschrieben. Lies das am besten noch mal in Ruhe. Da steht genau wie man es macht.

herbivore