Teljes WinForms proxy-ellenőrzési futás megszakítása
Tartson egyetlen megszakítási forrást egy WinForms proxy-ellenőrzési futáshoz, terjessze a megszakítást a HTTP-munkába, és állítsa le a lista előrehaladását.
A Mégse gombnak le kell állítania a futást. Ha minden proxy-ellenőrzés elkapja a megszakítást és normálisan visszatér, a külső ciklus egyszerűen a következő proxyra lép. Ilyenkor a képernyő úgy néz ki, mintha a Mégse semmit sem tett volna.
Modern .NET WinForms esetén tartson egy forrást űrlapmezőként, és engedje, hogy a megszakítás elérje az eseménykezelőt:
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();A configuredProxies az alkalmazás már feldolgozott proxy URI-listája. Az ingyenes proxy lista soraiból engedélyezett nyilvános célra irányuló ellenőrzés táplálható; őrizze meg a protokollt, és csak az e kezelő által támogatott típusokat használja. A felület minden műveletre vár, így az üzenethurok szabadon fogadhatja a Mégse kattintást.
Vigye a tokent a hálózatra
Az egyedi ellenőrzésnek el kell fogadnia ezt a tokent. Egy rövidített HTTP-ellenőrzés így nézhet ki:
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);
}A probeUri és a RecordResult a meglévő ellenőrzőhöz tartozik. Tartson megfelelő válaszméret-korlátot és időtúllépést ehhez a végponthoz. Az éles ellenőrző útvonalanként újrahasznosíthatja a klienseket; a részlet azt mutatja, merre halad a megszakítás, nem kapcsolatpool-tervet.
Ha a sikertelen proxykat rögzíteni és kihagyni kell, kapja el a várt hálózati hibákat az egyedi ellenőrzés körül. Engedje a futás megszakítását a külső kezelőhöz jutni. Párhuzamos ellenőrzéseknél ossza meg a futás tokenjét minden munkással, és várja meg a befejezésüket, mielőtt újabb futást engedélyez.