using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using Xamarin.Forms; namespace selectionSort { public partial class MainPage : ContentPage { public MainPage() { InitializeComponent(); InitializeLabels(); } private Random rnd = new Random(); private IDictionary labels = new Dictionary(); private void InitializeLabels() { labels.Add("label0", label0); labels.Add("label1", label1); labels.Add("label2", label2); labels.Add("label3", label3); labels.Add("label4", label4); labels.Add("label5", label5); labels.Add("label6", label6); labels.Add("label7", label7); labels.Add("label8", label8); labels.Add("label9", label9); } private void Button_Clicked(object sender, EventArgs e) { for (int i = 0; i < 10; i++) { labels["label" + i].WidthRequest = rnd.Next(300); } } // async w deklaracji metody wskazuje, że w metodzie jest wywolanie metody asynchronicznej // czyli takiej, która nie blokuje wątku obiektu wywołującego private async void Button_Clicked_1(object sender, EventArgs e) { // sortowanie for (int j = 0; j < 10; j++) { for (int i = j+1; i < 10; i++) { // wywołanie metody asynchronicznej // zmiana koloru int b = await changeColor(i, j, Color.Green); // opóżnienie 1s await Task.Delay(1000); // jeśli kolejny pasek jest wiekszy paski zamieniają się miejscami if (labels["label" + i].Width > labels["label" + j].Width) { int a = await swapPlace(i,j); // opóżnienie 1s await Task.Delay(1000); } int c = await changeColor(i, j, Color.Red); // opóżnienie 1s await Task.Delay(1000); } } } // metoda asynchroniczna private async Task swapPlace(int i,int j) { // zamiana miejsc pasków double tmp = labels["label" + i].Width; labels["label" + i].WidthRequest = labels["label" + j].Width; labels["label" + j].WidthRequest = tmp; return 1; } // zmaina koloru pasków, żeby można było zobaczyć które są sprawdzane private async Task changeColor(int i, int j, Color color) { labels["label" + i].BackgroundColor = color; labels["label" + j].BackgroundColor = color; return 1; } } }