Form freezt ganz kurz
-
Hey,
habe hier ein kleines Problem...
Bin dabei etwas kleines zu programmieren das (leider) alle paar Sekunden eine Url aufrufen muss... Das ganze regel ich per webClient->OpenRead da er auch etwas auslesen soll.
Allerdings freezt dann die Form immer ganz kurz... Was kann ich dagegen tuen?
Habe schon etwas von Threads gehört, allerdings wird das glaube ich nicht gehen da der Thread dann Variablen außerhalb des Threades ändern müsste....Danke schonmal
LogiteK
-
Das einfachste ist wohl Du benutzt einfach OpenReadAsync(..).
Danach must Du allerdings die Zugriffe auf das GUI aus dem Handler via Invoke(..) auf den UI Thread marshallen.Simon
-
Hey,
danke schonmal für die Antwort...
Wollte natürlich gleich starten nur hab ich keine Ahnung davon also -> Google. Msdn hat leider kein Beispiel und sonst gibts auch nichts brauchbares...Mir wird gerade auch komischerweiße angezeigt das nur eine adresse benötigt wird aber klappen Tuts trotzdem nicht....
Wäre dir echt dankbar wenn du mir ein kleines Beispiel geben könntest wie man das mit OpenReadAsync lösen kann...
thx
-
Edit: Nicht alle relevanten Teile waren erkennbar... jetzt hoffentlich schon:
public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); webClient = gcnew WebClient(); webClient->OpenReadCompleted += gcnew OpenReadCompletedEventHandler(this, &Form1::OpenReadCompleted); } protected: /// <summary> /// Clean up any resources being used. /// </summary> ~Form1() { if (components) { delete components; } if (webClient) { delete webClient; } } // ... private: WebClient^ webClient; void fetchButton_Click(Object^ sender, EventArgs^ e) { clearError(); try { webClient->OpenReadAsync(gcnew Uri(urlTextBox->Text)); } catch (WebException^ ex) { showError(ex->Message); } catch (UriFormatException^ ex) { showError(ex->Message); } fetchButton->Enabled = !webClient->IsBusy; } void OpenReadCompleted(Object^ sender, OpenReadCompletedEventArgs^ e) { // Seems to arrive on the UI thread => // no marshalling is required Debug::Assert(!InvokeRequired); fetchButton->Enabled = true; if (e->Cancelled) { showError(L"Reading the web site was canceled"); } else if (e->Error) { showError(e->Error->Message); } else { StreamReader reader(e->Result); showContent(reader.ReadToEnd()); } } void clearError() { errorTextBox->Clear(); } void showError(String^ errorMessage) { urlTextBox->Clear(); contentTextBox->Clear(); errorTextBox->Text = errorMessage; } void showContent(String^ content) { contentTextBox->Text = content; } };
-
Thx
warum bist du kein Mod hier ^^... Bist der aktivste in dem Bereich ^^