WinForms прокси-текшерүүнүн бүтүндөй жүгүртүүсүн жокко чыгаруу
WinForms прокси-текшерүү жүгүртүүсү үчүн бир жокко чыгаруу булагын кармаңыз, жокко чыгарууну HTTP ишине таратыңыз жана тизменин илгерилешин токтотуңуз.
Жокко чыгаруу баскычы жүгүртүүнү токтотушу керек. Эгер ар бир прокси текшерүү жокко чыгарууну кармап, кадимкидей кайтса, сырткы цикл кийинки проксиге өтөт. Ошондо экран жокко чыгаруу эч нерсе кылбагандай көрүнөт.
Заманбап .NET WinForms ичинде бир булакты форма талаасы катары кармаңыз жана жокко чыгаруунун окуя иштетүүчүсүнө жетүүсүнө жол бериңиз:
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 — колдонмо мурун талдаган прокси URI тизмеси. Акысыз прокси тизмесинен алынган саптар уруксат берилген коомдук максатты текшерүүнү азыктандыра алат; протоколду сактаңыз жана бул иштетүүчү колдогон түрлөрдү гана колдонуңуз. UI ар бир операцияны күтөт, ошондуктан билдирүү циклы жокко чыгаруу басуусун кабыл алуу үчүн бош калат.
Токенди тармакка жеткириңиз
Жеке текшерүү ошол токенди кабыл алышы керек. Кыскартылган HTTP текшерүү мындай көрүнүшү мүмкүн:
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 жана RecordResult учурдагы текшерүүчүгө таандык. Бул акыркы чекит үчүн ылайыктуу жооп өлчөмүнүн чегин жана убакыт чегин кармаңыз. Өндүрүштүк текшерүүчү кардарларды маршрут боюнча кайра колдоно алат; үзүндү жокко чыгаруунун кайда жүргөнүн көрсөтөт, туташуу пулунун дизайнын эмес.
Эгер ийгиликсиз проксилер жазылып, өткөрүп жиберилиши керек болсо, жеке текшерүүнүн айланасында күтүлгөн тармактык бузулууларды кармаңыз. Жүгүртүү жокко чыгаруусу сырткы иштетүүчүгө чыгышына жол бериңиз. Параллель текшерүүлөр үчүн жүгүртүү токенин ар бир жумушчу менен бөлүшүңүз жана башка жүгүртүүнү иштетүүдөн мурун алардын аякташын күтүңүз.