Steðga at blokkera WinForms meðan proxy-kanningar ganga
Setið ein samtíðis Task.WaitAll í UI-tiltakshandførarinum við bíðaðar, avmarkaðar skipsyrkingar, og dagførið síðan stýrieindirnar í UI-samhenginum sum verður endurnýtt.
Task.WaitAll í WinForms-klikkhandførara blokkerar vindeygað, sjálvt tá ið kanningarnar sjálvar brúka asynkront HTTP. UI-tráðurin kann ikki viðgerða boð, og fangaðar framhald kunnu tørva sama blokkerada tráðin.
Fyri .NET 6 ella nýggjari, bíðað eftir avmarkaðum skipsyrkingi:
private async void checkButton_Click(object sender, EventArgs e)
{
checkButton.Enabled = false;
try
{
var entries = proxyList.Lines
.Where(line => !string.IsNullOrWhiteSpace(line));
foreach (var batch in entries.Chunk(8))
{
var results = await Task.WhenAll(batch.Select(CheckProxyAsync));
ShowResults(results);
}
}
catch (Exception error)
{
ShowCheckError(error);
}
finally
{
checkButton.Enabled = true;
}
}Hetta hoyrir til í eini verandi form við System.Linq og System.Threading.Tasks tøkum. CheckProxyAsync ger avmarkað asynkront I/O og vendir aftur einum úrsliti; tað handterar ikki stýrieindir frá einum bakgrunnstráði. ShowResults og ShowCheckError eru applikatiónsmetodir.
Vanliga await-framhaldið vendir aftur til UI-samhengið har handførarin byrjaði, so ShowResults kann dagføra stýrieindir. Kotið sum beinleiðis gongur á øðrum tráði má flyta stýrieindatøkum gjøgnum tann stuðlaða WinForms-mekanismuna.
Ókeypis proxy-listin kann veita inntaksadressur; lat bert protokoll við sum CheckProxyAsync hevur gjørt. Átta er eitt dømisveiting. Næsta skipsyrking bíðar eftir seinasta kanningini í núverandi skipsyrking, og skiftir nakað av gjøgnumstreyminum fyri avmarkaða uppgávuskapan. Halt tíðarfrestrarnar fyri hvørja kanning og avtøkuna í CheckProxyAsync; at bíða eftir skipsyrking kann ikki fáa eina óavmarkaða netverkshandling at enda.