Webrequest beim ersten mahl SEHR langsam?

  • C#

Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Fire88.

    Webrequest beim ersten mahl SEHR langsam?

    Hallo VBler,

    Ich habe gestern so supper Hilfe Hier bekommen das ich wider etwas zu fragen habe. (Ne Spass, ich bin stecken geblieben -.- )

    Ich habe eine Main.cs in der ich einer Funktion einen Wert übergebe, diese Funktion ist in der Functions.cs....

    In dieser Funktion wen diese fertig ist mit überprüfen etc, möchte ich den Erhaltenen Wert in ein Label schreiben: lb_answer.Text = answer;

    aber da bekomme ich immer nur einen Fehler.:

    Quellcode

    1. Fehler 1 Der Name 'lb_answer' ist im aktuellen Kontext nicht vorhanden. Bann Tool\Functions.cs


    Hier mal die restlichen Sachen die etwas mit der Funktion etc zutun haben:

    main.cs

    VB.NET-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.ComponentModel;
    4. using System.Data;
    5. using System.Drawing;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Windows.Forms;
    9. namespace Inscarnium_Bann_Tool
    10. {
    11. public partial class MainFrm : Form
    12. {
    13. public MainFrm()
    14. {
    15. InitializeComponent();
    16. }
    17. private void btn_bannen_Click(object sender, EventArgs e)
    18. {
    19. if (tb_bann_name != null) {
    20. Functions.Bannen(tb_bann_name.Text.ToString());
    21. }
    22. }
    23. }
    24. }



    Functions.cs

    VB.NET-Quellcode

    1. using System;
    2. using System.Collections.Generic;
    3. using System.Linq;
    4. using System.Text;
    5. using System.Net;
    6. using System.IO;
    7. using System.Windows.Forms;
    8. namespace Inscarnium_Bann_Tool
    9. {
    10. class Functions
    11. {
    12. public static void SecurityToken(string token)
    13. {
    14. ///StreamReader token_reader = new StreamReader();
    15. }
    16. public static void Bannen(string name) {
    17. WebClient bannclient = new WebClient();
    18. string answer = bannclient.DownloadString("http://www.procoder.ch/*********/admintool/index.php?todo=bann&name=" + name);
    19. lb_answer.Text = answer; // geht nicht, Fehler bei lb_answer
    20. ///MessageBox.Show(answer); // geht
    21. return;
    22. }
    23. }
    24. }




    Nun meine Frage, was mache ich nicht richtig? ich habe schon alles Versucht was mir in den Sinn kam.
    Das label selber habe ich auch auf Public gestellt, bringt nichts.
    habe versucht in der Main.cs auf static zu stellen, geht nicht.

    habe MainFram.lb_answer*** versucht, geht nicht.

    nun bin ich am ende meines Lateins?

    Sollte ich es per Rückgabewert der Funktion in der Main.cs machen oder sollte mann es besser in der Funktion selber machen, so wie ich es gerade versuche?

    Hoffe da kennt einer eine Lösung zu dem Missgeschick.

    danke

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Fire88“ ()

    Offensichtlich ist lb_answer kein statisches Member der Klasse Functions.
    Du kannst aus einer statischen Funktion einr Klasse nicht auf dynamische Member einer anderen Klasse zuigreifen, ohne eine Instanz davon zu übergeben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ich glaube du meinst nicht das selbe wie ich.
    die Variabel ist ja nicht das Problem, sondern das Label. ich habe keinen Zuriff auf das label:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. namespace Inscarnium_Bann_Tool
    2. {
    3. class Functions
    4. {
    5. public static string answer;
    6. public static void SecurityToken(string token)
    7. {
    8. ///StreamReader token_reader = new StreamReader();
    9. }
    10. public static void Bannen(string name) {
    11. WebClient bannclient = new WebClient();
    12. answer = bannclient.DownloadString("http://www.procoder.ch/******/admintool/index.php?todo=bann&name=" + name);
    13. lb_answer.Text = answer; [b]// geht nicht, Fehler bei lb_answer[/b]
    14. ///MessageBox.Show(answer); // geht
    15. return;
    16. }
    17. }
    18. }

    RodFromGermany schrieb:

    Offensichtlich ist lb_answer kein statisches Member der Klasse Functions.
    Du kannst aus einer statischen Funktion einr Klasse nicht auf dynamische Member einer anderen Klasse zuigreifen, ohne eine Instanz davon zu übergeben.

    uf, wie kann ich eine Instanz für das Label anlegen? dies hab ich noch nie gesehen/ gemacht -.-... danke für den tipp




    programmer71 schrieb:


    Wo befindet sich das Label?

    auf der WinForm natürlich ;)
    Die Instanz wird automatisch im Hintergrund durch einen vom Designer generierten Code angelegt. Du kannst im Eigenschaftenfenster des Labels festlegen ob private, public oder protected.


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.
    Du mußt an einer Stelle Deine Programmes die Referenzen auf Deine Formulare speichern, sodass Du auf sie zugreifen kannst. Da ich die Zusammenhänge nicht kenne, nur geraten:
    Wenn Du das zweite Formular aus dem Startformular öffnest, solltest Du die Referenz dort speichern.

    Für den Zugriff auf den Text des Labels mußt Du dieses von aussen zugänglich machen, was am einfachsten darüber geschieht, dass Du es als Internal definierst - das geht über den Designer im Property Editor unter Entwurf - Modifier.
    So, ich mache es nun anderst...

    und damit man es leichter versteht und es nicht missversteht falls ich was falsch schreibe, habe ich kurz ein Video gemacht.

    Die request zeit beim ersten mal geht Ewigs, weis jemand woran dies liegen kann? ich habe nichts anderes offen ausser skype..

    beim 2 & 3ten mal geht es fix, so wie es auch sein sollte.

    hier der Youtubelink:
    youtube.com/watch?v=VMjwXnzz8j4&feature=youtu.be

    Hoffe das jemand weis wo das ich hier einen mist drin habe.

    danke

    Edit: Nein am server wird es nicht liegen wen das einer schreiben sollte. ihr könnt es ja mal testen mit dem Link hier:

    procoder.ch/inscarnium/adminto…p?todo=bann&name=TestName
    Wie wärs, wenn du einfach den Text als Rückgabewert deiner Funktion festlegst und ihn dann in der aufrufenden Methode dem Label übergibst.
    Dein Fehler ist nämlich, dass du von einer anderen Klasse aus auf das Label zugreifen willst, das auf der Form liegt. Das ist aber nicht sinn der Sache, die Form muss sich selbst um ihre Steuerelemente kümmern.
    Hör auf mit dem Clusterfuck und schreibe nen vernünftigen Code, der schnell und präzise läuft.
    Vergiss Webrequest. Die Lösung deines Problems wurde bereits zweimal genannt. Du musst das Label im Property-Designer für andere Formen verfügbar machen.

    Artentus schrieb:

    Wie wärs, wenn du einfach den Text als Rückgabewert deiner Funktion festlegst und ihn dann in der aufrufenden Methode dem Label übergibst.
    Dein Fehler ist nämlich, dass du von einer anderen Klasse aus auf das Label zugreifen willst, das auf der Form liegt. Das ist aber nicht sinn der Sache, die Form muss sich selbst um ihre Steuerelemente kümmern.




    programmer71 schrieb:


    Hör auf mit dem Clusterfuck und schreibe nen vernünftigen Code, der schnell und präzise läuft.
    Vergiss Webrequest. Die Lösung deines problems wurde bereits zweimal genannt. Du musst das Label im Property-Designer für andere Formen verfügbar machen.


    Ich mache ja nichts mehr mit dem Label, schaut euch das Video an bitte... da seht ihr was ich meine.
    youtube.com/watch?v=VMjwXnzz8j4&feature=youtu.be
    Das mit dem Verfügbar machen ist aber imo Quatsch. Die Statische Klasse ist ja da, um bestimmte Daten zu verarbeiten (in diesem Fall anhand eines Namens einen WebRequest ausführen). Daher sollte sie auch mit nichts anderem als diesen Daten in Berührung kommen. Soll heißen, die Funktion sollte nur das Ergebnis der Anfrage zurückgeben, wie das weiterverwendet wird muss dann der Aufrufer entscheiden.
    nope an meinem pc kann es nicht sein, da die exe bei nem freund genau so lahm ist wie bei mir, zudem habe :

    hexacore
    win7 64bit ultimate
    64gb ram
    Grafikkarte mit 4gb gddr5

    etc etc..

    ah und eine 150K Leitung in der Schweiz halt.
    Das mit der langen Dauer beim ersten Request ist mir auch schon oft passiert. Ich weiß aber nicht woran das liegt und ob man das überhaupt beheben kann.
    Kompiliere die Anwendung mal auf Release und führe sie dann mit dem Explorer aus, das könnte es beheben. Wenn nicht kannst du glaube ich nichts dagegen tun.