In hiele WinForms-proxykontrôle-run annulearje
Hâld ien annulearringsboarne foar in WinForms-proxykontrôle-run, jou annulearring troch HTTP-wurk troch en stop it foarútgien fan 'e list.
De knop Annulearje moat de run stopje. As elke proxykontrôle de annulearring opfangt en normaal weromkomt, giet de bûtenste lus gewoan nei de folgjende proxy. Dan liket it skerm as hat Annulearje neat dien.
Yn modern .NET WinForms hâld ien boarne as formulierfjild en lit annulearring de evenemintbehanneler berikke:
private CancellationTokenSource? activeRun;
private async void startButton_Click(object sender, EventArgs e)
{
if (activeRun is not null) return;
using var run = new CancellationTokenSource();
activeRun = run;
startButton.Enabled = false;
try
{
foreach (Uri proxy in configuredProxies)
{
run.Token.ThrowIfCancellationRequested();
await CheckProxyAsync(proxy, run.Token);
}
statusLabel.Text = "Finished";
}
catch (OperationCanceledException) when (run.IsCancellationRequested)
{
statusLabel.Text = "Stopped";
}
finally
{
activeRun = null;
startButton.Enabled = true;
}
}
private void cancelButton_Click(object sender, EventArgs e)
=> activeRun?.Cancel();configuredProxies is de al parsearre list fan proxy-URI's fan 'e applikaasje. Rijen út 'e fergees proxy-list kinne in tastiene kontrôle fan in iepenbier doel fiede; behâld it protokol en brûk allinnich typen dy't dizze behanneler stipet. De UI wachtet op elke operaasje, sadat de berjocht-lus frij bliuwt om de annulearringsklik te ûntfangen.
Drage it token nei it netwurk
De yndividuele kontrôle moat dat token akseptearje. In ferkoarte HTTP-kontrôle kin der sa útsjen:
private async Task CheckProxyAsync(Uri proxy, CancellationToken token)
{
using var handler = new HttpClientHandler
{
Proxy = new System.Net.WebProxy(proxy),
UseProxy = true
};
using var client = new HttpClient(handler);
using var response = await client.GetAsync(
probeUri, HttpCompletionOption.ResponseHeadersRead, token);
response.EnsureSuccessStatusCode();
string body = await response.Content.ReadAsStringAsync(token);
RecordResult(proxy, body);
}probeUri en RecordResult hearre by de besteande kontrôleur. Hâld in passende grins foar antwurdgrutte en in timeout foar dat einpunt. In produksjekontrôleur kin klanten per rûte werbrûke; it fragmint lit sjen wêr't annulearring reizget, net in ferbiningspool-ûntwerp.
As mislearre proxy's opnommen en oerslein wurde moatte, fang ferwachte netwurkflaters om 'e yndividuele kontrôle hinne. Lit annulearring fan 'e run ûntkomme nei de bûtenste behanneler. Foar parallelle kontrôles, diel it run-token mei elke wurknimmer en wacht op har foltôging foardat in oare run ynskeakele wurdt.