рд╣рдо oDesk рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ

oDesk

рд╣реИрд▓реЛ, habroproizolyov!

рд╣рд╛рд▓ рдХреЗ рдПрдХ рд▓реЗрдЦ рдХреЗ рдЖрд▓реЛрдХ рдореЗрдВ , рдореИрдВ рдЖрдкрдХреЛ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЕрдВрдд рд╕реЗ рд▓реЗрдХрд░ рд╕рдорд╛рдкреНрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ oDesk рдкрд░ рд╡рдЪрдирдмрджреНрдз рд╕рдордп рдХреА рдорд╛рддреНрд░рд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдХрд╣рд╛рдиреА рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

рдЕрдкрдиреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдкреНрд░рдХреГрддрд┐ рд╕реЗ, рдореИрдВ рдЕрдХреНрд╕рд░ ASP.NET рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕рдВрд▓рдЧреНрди рд╣реЛрддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдПрдХ рд╢реМрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рдХрднреА-рдХрднреА рдореИрдВ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрддрд╛ рд╣реВрдВред рдЖрдорддреМрд░ рдкрд░ рдпреЗ рд╕рдВрдХреАрд░реНрдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВред

рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдЕрдХреНрд╕рд░ oDesk рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдХрд╛рд░реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП oDesk рдЯреАрдо рд░реВрдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ - рд╕рдордп рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реИ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдврд╝рддреА рд╣реИ, рдЧреНрд░рд╛рд╣рдХ рд╕рдВрддреБрд╖реНрдЯ рд╣реЛрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЕрдХреНрд╕рд░ рдЦреБрдж рдХреЛ рдпрд╣ рд╕реЛрдЪрддреЗ рд╣реБрдП рдкрд╛рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдЕрдиреБрдмрдВрдзрд┐рдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХрд╛ рд╕рд╣реА рд╕рдордп рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рд╕рдордп рджреЗрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдирд╣реАрдВ рд╣реИред рдХрднреА-рдХрднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕реЗ "рдЕрдЧрд▓реЗ рд╕рдкреНрддрд╛рд╣ рдореБрдЭ рдкрд░ 25 рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ" рдФрд░ рдЗрд╕реА рддрд░рд╣, рдФрд░ рдХрднреА-рдХрднреА рд╕рд┐рд░реНрдл рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдПред рд╣рд╛рдВ, рдмреЗрд╢рдХ, рдУрдбрд╕реАрдПрд╕ рдХрд╛ рдПрдХ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдпрд╣ рд╕рдм рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╛ рддреЛ рдУрдбреАрдПрд╕рд╕реА рдкреГрд╖реНрда рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЦреБрд▓рд╛ рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рд╕рдордп-рд╕рдордп рдкрд░ рдЗрд╕реЗ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдХрд┐рддрдирд╛ рджреЗрдЦрдирд╛ рд╣реИ рд╕рдордп рдЗрд╕ рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдЬреНрдЮрд╛рдмрджреНрдз рд╣реИред

рд╕реНрдЯреЗрдЬ 1 - рдПрдХ рд╡рд┐рдЪрд╛рд░


рдПрдХ рд╢рд╛рдо, рдореЗрд▓ рджреЗрдЦрдиреЗ рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдУрдбрд┐рд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп "рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ" рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд▓реЗрдХрд░ рдЖрдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдПрдХ рд╕реВрдЪреА рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдЖрд╡реЗрджрди рд╕реЗ рдХреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдпрд╣ рдЫреЛрдЯрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рд╕рдордп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд░реЗ рдЕрдиреБрдХреВрд▓ рдерд╛:

  1. рдкреНрд░рддрд┐ рджрд┐рди, рд╕рдкреНрддрд╛рд╣ рдФрд░ рдорд╣реАрдиреЗ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рд╕рдордп рджреЗрдЦрдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
  2. рд╣рд░ 10 рдорд┐рдирдЯ рдореЗрдВ рд╕рдВрдХреЗрддрдХ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрджреНрдпрддрди;
  3. рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВ, рдореБрдЭреЗ "рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрдХреНрд░рдо" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ;
  4. рдиреНрдпреВрдирддрдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ ("рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдп - рдЕрдзрд┐рдХрддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛");
  5. рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред

рдЕрдЧрд▓рд╛, рдореИрдВрдиреЗ рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рдЪреБрдирдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдореЗрд░реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдЕрдХреНрд╕рд░ C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ WPF рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рди-рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред WPF рдХреНрдпреЛрдВ? рд╕рд┐рд░реНрдл рдПрдХ рдХрд╛рд░рдг рд╕реЗ, рдЬреЛ рдЙрд╕ рд╕рдордп рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдерд╛, рдпреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ "рдЕрдкрдиреЗ рд▓рд┐рдП" рдереЗ (рдореБрдЭреЗ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдерд╛ рдХрд┐ рдХреЛрдИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛) рдФрд░ рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ WPF рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, XAML "рд▓рд╛рдЗрд╡" рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдЪрд░рдг 2 - рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдУрдбреЗрд╕реНрдХ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреГрд╖реНрда рдкрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдХреЗ рджреМрд░рд╛рди, рдореИрдВрдиреЗ рддреБрд░рдВрдд 3 рдЙрдЪрд┐рдд рдорд╛рдирдХ рдЯреИрдЧ рджреЗрдЦреЗ:

<form enctype="multipart/form-data" id="login_frm" name="" onsubmit="trim_all( this); disable_buttons(); " action="/login.php" method="post" accept-charset="utf-8"> <input id="login" type="text" maxlength="512" size="33" tabindex="1" value="" name="login" placeholder="user name" style="margin-bottom: 10px;"> <input id="password" type="password" maxlength="512" size="33" tabindex="2" value="" name="password" placeholder="password"> 


рдпрд╣ рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ oDesk рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ HttpClient рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдпрд╣ .NET 4.5 рд╕реЗ рдПрдХ рдорд╛рдирдХ рд╡рд░реНрдЧ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, .NET 4.0 рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлреЙрд░реНрдо рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 MultipartFormDataContent data = new MultipartFormDataContent(); data.Add(new ByteArrayContent(Encoding.UTF8.GetBytes(this._login)), "login"); data.Add(new ByteArrayContent(Encoding.UTF8.GetBytes(this._password)), "password"); data.Add(new ByteArrayContent(Encoding.UTF8.GetBytes("login")), "action"); HttpResponseMessage response = this._client.Post("https://www.odesk.com/login.php", data); 


рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХреЗ рд╕рдХреНрд░рд┐рдп рдЕрдиреБрдмрдВрдзреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди, рдЬреИрд╕рд╛ рдХрд┐ рдЙрд╕ рд╕рдордп рдореБрдЭреЗ рд▓рдЧ рд░рд╣рд╛ рдерд╛, рдЙрдиреНрд╣реЗрдВ рдкреГрд╖реНрда рд╕реЗ рд▓реЗ рдЬрд╛рдирд╛ рдерд╛ https://www.odesk.com/team/scripts/login?initial=1&after_login_location=http%3A22%2Fwww.odesk.com%2Fteam% 2Fscripts% 2Freport ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫреЛрдЯреА рд╡рд┐рдзрд┐ рд▓рд┐рдЦреА рдЧрдИ:

 this._companies = new List<String>(); HttpResponseMessage response = this._client.Get("https://www.odesk.com/team/scripts/login?initial=1&after_login_location=http%3A%2F%2Fwww.odesk.com%2Fteam%2Fscripts%2Freport"); Regex htmlCompaniesRegex = new Regex(@"(?<=<select name='selected_company'>)(\w|\W)+(?=</select>)"); String htmlCompanies = htmlCompaniesRegex.Match(response.Content.ReadAsString()).Value; Regex companiesRegex = new Regex("(?<=<option value=\")(\\w|\\W)+?(?=\">)"); foreach (Match company in companiesRegex.Matches(htmlCompanies)) { (this._companies as List<String>).Add(company.Value); } 


рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдмрд╕ рджреЛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рд╣реИред
рдЦреИрд░, рдЕрдВрдд рдореЗрдВ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рдкреНрд░рддреНрдпрдХреНрд╖ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдкреГрд╖реНрда https://www.odesk.com/team/scripts/report рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрдиреЗ рдкрд░, рдореБрдЭреЗ рд▓реЙрдЧ рдЗрди рдХреЛ рд╕реАрдПрд╕рд╡реА рдХреЗ рд░реВрдк рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ рдорд┐рд▓рд╛:

www.odesk.com/team/scripts/report?company_id={_}&user_id={}&vs_users=&include_offline=1&include_overtime=0&include_online=1&include_memos=1&type=CSV&date={}&start_date={__}&end_date={__}&range=custom


рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЫреЛрдЯрд╛ рдХреЛрдб рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛:

 private Boolean TryGetWorkedTime(String company, DateTime from, DateTime to, out TimeSpan workedTime) { workedTime = TimeSpan.FromMinutes(0); Boolean success = true; try { String timeUrl = "https://www.odesk.com/team/scripts/report?company_id={0}&user_id={1}&vs_users=&include_offline=1&include_overtime=0&include_online=1&include_memos=1&type=CSV&date={2:MM/dd/yy}&start_date={3:MM/dd/yy}&end_date={4:MM/dd/yy}&range=custom"; HttpResponseMessage response = this._client.Get(String.Format(timeUrl, company, this._login, to, from, to)); CsvReader reader = new CsvReader(new StreamReader(response.Content.ContentReadStream)); while (reader.Read()) { workedTime += reader.GetField<TimeSpan>(2); } } catch (Exception e) { workedTime = TimeSpan.MinValue; success = false; } return success; } 


рдФрд░ рдлрд┐рд░ рдореИрдВрдиреЗ рд╕рднреА рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрд▓ рд╕рдордп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝реА:

 public Boolean TryGetFullWorkedTime(DateTime date, ResultType type, out TimeSpan workedTime) { TimeSpan result = TimeSpan.FromSeconds(0); Boolean success = true; DateTime to = date; DateTime from = date; if (type == ResultType.Week) { from = from.AddDays(-(from.DayOfWeek == DayOfWeek.Sunday ? 6 : ((Int32)from.DayOfWeek - 1))); } if (type == ResultType.Month) { from = new DateTime(from.Year, from.Month, 1); } Object synchroPoint = new Object(); // get counter for each company (in parallel). if (this.Companies != null && this.Companies.Any()) { Parallel.ForEach(this.Companies.Except(this.IgnoredCompanies), company => { TimeSpan time; if (this.TryGetWorkedTime(company, from, to, out time)) { lock (synchroPoint) { result += time; } } else { success = false; result = TimeSpan.MinValue; } }); } else { success = false; result = TimeSpan.MinValue; } workedTime = result; return success; } 


рдЗрд╕рд▓рд┐рдП, рд╕рдм рдХреБрдЫ рд╡рд░реНрдгрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореЗрд░реЗ рдкрд╛рд╕ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рддрд░реАрдХреЗ рдереЗред рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХреА:



рдпрд╣ рдПрдХ рдореВрд▓ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдкрдЫрддрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рддреЛ рдПрдХ рд╕реНрдорд╛рд░рд┐рдХрд╛ рдХреЗ рд░реВрдк рдореЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдЬрдирди рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдореВрд▓ рдХреА рдиреАрд░рд╕рддрд╛ рдХреЛ рдмрддрд╛рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЕрдЧрд▓реЗ рджрд┐рди рднреА рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред

рдЕрдЧрд▓реЗ рджрд┐рди рдХреА рд╕реБрдмрд╣, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдХрд┐ "рдореИрдВ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрдпреЛрдВ рджреЗрдЦреВрдВрдЧрд╛?", рдФрд░ рдЗрд╕рдХрд╛ рдЙрддреНрддрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЦреБрдж рд╣реА рдорд┐рд▓ рдЧрдпрд╛: "рджрд┐рди рдХреЗ рд▓рд┐рдП рд╕рдордп рд╕реВрдЪрдХ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдирд╛"ред рдЗрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдореИрдВрдиреЗ рдмрд╛рдХреА рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЗрд╕ рд╕реВрдЪрдХ рдХреЛ рдмрдбрд╝рд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдпрд╣ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдХрд▓рд╛:



рдмреЗрд╢рдХ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдпрд╣ рдорд╣рд╕реВрд╕ рдХрд░ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдЧрд╛рдпрдм рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдХреБрдЫ рдФрд░ рд╡рд┐рдЪрд╛рд░-рд╡рд┐рдорд░реНрд╢ рдФрд░ рд╕реНрдХреЗрдЪрд┐рдВрдЧ рдХреЗ рдмрд╛рдж, рдореИрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдкрд░ рдЖрдпрд╛:



рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдЖрдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ 8 рдпреВрдЖрдИ рдХреЗ рдореЗрдЯреНрд░реЛ рдпреВрдЖрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЬреЛ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рд╣реИред

рдЕрдВрддрд┐рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдордВрдЬреВрд░реА рджрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдмрд╕ рдЗрд╕реЗ XAML рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдФрд░ рд▓рд╛рдкрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд▓реЙрдЬрд┐рдХ рдХреЛ рдЬреЛрдбрд╝рд╛ред рдкрд░рд┐рдгрд╛рдо рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рд╕рдВрдХреЗрддрдХ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд▓рдЧрднрдЧ рд╡рд╣реА рдерд╛ рдЬреЛ рдореБрдЭреЗ рдЪрд╛рд╣рд┐рдП рдерд╛ред

рдЪрд░рдг 3 - рдЖрд░рдВрдн рдХрд░рдирд╛


рдХреБрдЫ рджрд┐рдиреЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдореА рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЛ рдЕрдиреНрдп рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдирдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛, рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ, рд╕реБрдЭрд╛рд╡ рдФрд░ рд╕реБрдЭрд╛рд╡ рд╕реБрди рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдХреЗ рдорд╣рд╛рди рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛, рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЗ рдПрдХ рдкрд╣рд╛рдбрд╝ рдХреЗ рд╕рд╛рде рдмрдордмрд╛рд░реА рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореИрдВрдиреЗ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдХрдИ рдкреНрд░рд╕реНрддрд╛рд╡реЛрдВ рдХреЛ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдореБрдЭреЗ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реЗ "рд░рд╛рдХреНрд╖рд╕" рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ рдЬреЛ рд╕рдм рдХреБрдЫ рдЬрд╛рдирддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЙрд╕ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕реЗ рд╡рд┐рджрд╛ рдирд╣реАрдВ рд╣реБрдЖ рдЬреЛ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - "рдЕрдзрд┐рдХ рдХреБрдЫ рдирд╣реАрдВред"

рдХрдИ рджрд┐рдиреЛрдВ рдХреЗ рд╢реЛрдзрди рдХреЗ рдмрд╛рдж, рдХреБрдЫ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛:

  1. рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╡рд┐рд╖рдп;
  2. ProgressBar рдЕрджреНрдпрддрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;
  3. рдЬрдм рдЗрдВрдЯрд░рдиреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ, рддреЛ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИ;
  4. рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЛрдВ рдХреЗ рдЖрдВрдХрдбрд╝реЗ ( рдПрд▓рдПрдордмреА рдбрдмрд▓ рдХреНрд▓рд┐рдХ);
  5. рд╕реВрдЪреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░реЗрдВ;
  6. рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ (Ctrl + рд╕реНрдХреНрд░реЙрд▓)ред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рднреА рдХрд╛рд░реНрдп рдХрд┐рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реБрдЖ:



рдЕрдВрддрд┐рдо "рдЯрдЪ" рд╕реНрдерд╛рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдирд╛рдо рдФрд░ рддреИрдирд╛рддреА рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдерд╛ред рдПрдХ рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рднреА рдмреЗрд╣рддрд░ рдирд╣реАрдВ рд╕реЛрдЪрд╛ рдерд╛ (рдФрд░ рдореИрдВ рдЙрд╕ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдм рдФрд░ рдирд╣реАрдВ рд╕реЛрдЪрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛) oscesktop рдХреА рддреБрд▓рдирд╛ рдореЗрдВред рд▓реЗрдХрд┐рди, рдлрд┐рд░ рднреА, рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд╛рдо рдХрд╛рдлреА рд╕рд╛рд░реНрдердХ рд╣реИред

рд╕рдорд╛рдкрди


рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ (рдХрдо рд╕реЗ рдХрдо рдореЗрд░реЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ) рдХрд╛рд░реНрдпрдХреНрд░рдо рдорд┐рд▓рд╛ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдЫрд╣ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕реМрдВрдкреЗ рдЧрдП рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдореБрдХрд╛рдмрд▓рд╛ рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХрдИ рд▓реЛрдЧреЛрдВ рдиреЗ рднреА рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдФрд░ рд╡реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рднреА рдХреЛ рдЦреБрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдРрд╕реЗ рд╣реИрдВ рдЬреЛ рдЙрд╕реЗ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рдереЗ ... рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдХреНрдпреЛрдВред рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдордЭрд╛рдпрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВрдиреЗ WPF рдХрд╛ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреАред

рдЕрдм рдореИрдВрдиреЗ рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЙрдлреНрдЯрд┐рдВрдХ рдХреЛ рдЬрдирддрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм рддрдХ рдмрд┐рдирд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡реЗ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд╣реИрдВ, рдмрд╛рдж рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдЧрд┐рдЯ рдкрд░ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд╛рдЙрдирд▓реЛрдб рдкреГрд╖реНрдаред

рдЕрдм рд╡рд┐рдВрдбреЛрдЬ 8 рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕ "рдШрд░" рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реЛрдЧрд╛-рдлреЙрд░-рдлрди рдкреНрд░реЛрдЬреЗрдХреНрдЯред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/In153055/


All Articles