Загрузка данных в соответствии с сеткой данных по индикатору хода выполнения - PullRequest
0 голосов
/ 06 ноября 2018

Вот что у меня есть:

        #region Method For Loading Data
    private async Task Loading(Func<string> SearchStringForUser)
    {
        ObservableCollection<VW_Users> collection = new ObservableCollection<VW_Users>();
        object @lock = new object();
        BindingOperations.EnableCollectionSynchronization(collection, @lock);
        DataGrid_User.ItemsSource = collection;
        await Task.Run(() =>
        {


            using (SqlConnection connection = new SqlConnection(PublicVar.ConnectionString))
            {
                SqlCommand command = new SqlCommand("select * From VW_Users where 1 = 1 And @GymID = @GymId", connection);
                command.Parameters.AddWithValue("@GymID", PublicVar.GymID + " " + SearchStringForUser());
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (reader.HasRows)
                {
                    const int N = 10;
                    VW_Users[] cache = new VW_Users[N];
                    int counter = 0;
                    while (reader.Read())
                    {
                        VW_Users obj = new VW_Users();
                        obj.UserID = Convert.ToInt32(reader["UserID"]);
                        obj.UserName = Convert.ToString(reader["UserName"]);            
                        cache[counter] = obj;
                        //...and so on for each property...

                        if (++counter == N)
                        {
                            //add N items to the source collection
                            foreach (VW_Users x in cache)
                            {
                                collection.Add(x);


                            } 
                            counter = 0;
                            this.Dispatcher.InvokeAsync(() => {
                                MyProg.Value += 20;
                            });

                            ////add a delay so you actually have a chance to see that N items are added at a time
                               System.Threading.Thread.Sleep(500);
                        }
                    }
                    //add any remaining items
                    for (int i = 0; i < counter; ++i)
                    {
                        collection.Add(cache[i]);

                    }

                }
                reader.Close();
            }

        });

    }
    #endregion

он ожидает загрузки данных в мою сетку данных, теперь у меня есть два запроса прямо здесь Как я могу сделать изображение повернуто на 360, как загрузка изображения ... и мой важный вопрос - как я могу показать загруженные данные по индикатору выполнения например, когда 10% данных, загруженных, мое значение индикатора прогресса получает 10%, когда это происходит, мой индикатор прогресса получает 100%. в кодах я назвал мой индикатор выполнения «MyProg», но он не работает. какая лучшая идея для этого?

1 Ответ

0 голосов
/ 06 ноября 2018

как я могу показать загруженные данные по индикатору выполнения, например, когда 10% данных, загруженных, мое значение индикатора выполнения получает 10%, когда это происходит, мой индикатор выполнения получает 100%?

Вы не знаете, сколько строк будет возвращать ваш запрос, пока не прочитаете их, поэтому невозможно узнать, что вы обработали 10% с учетом текущей реализации. Вы можете использовать ProgressBar со свойством IsIndeterminate, установленным на true.

Как указал @bommelding, вы можете также рассмотреть возможность использования асинхронного API класса SqlDataReader вместо использования Task.Run: https://blogs.msdn.microsoft.com/adonet/2012/07/15/using-sqldatareaders-new-async-methods-in-net-4-5-part-2-examples/

как сделать изображение повернутым на 360, как при загрузке изображения?

Учитывая элемент Image, который вы добавили в разметку XAML, например:

<Image x:Name="image" Source="image.png" />

.. вы можете установить его LayoutTransform или RenderTransform свойство равным RotateTransform, которое вы анимируете следующим образом:

RotateTransform rotateTransform = new RotateTransform();
image.RenderTransform = rotateTransform;
image.RenderTransformOrigin = new Point(0.5, 0.5);

rotateTransform.BeginAnimation(RotateTransform.AngleProperty,
    new DoubleAnimation() { From = 0, To = 360, Duration = TimeSpan.FromSeconds(1), RepeatBehavior = RepeatBehavior.Forever, FillBehavior = FillBehavior.Stop });

await Task.Run(...);

rotateTransform.BeginAnimation(RotateTransform.AngleProperty, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...