Гость
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Странности в UI в ContinueWith, если сам Task отрабатывает слишком быстро / 2 сообщений из 2, страница 1 из 1
13.02.2015, 11:39
    #38878910
monstrilla
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности в UI в ContinueWith, если сам Task отрабатывает слишком быстро
Затрудняюсь кратко сформулировать сабж, излагаю суть.

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="3*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <TextBlock Grid.Row="0"
                   Grid.Column="0"
                   Margin="5,5,5,0"
                   FontSize="14"
                   HorizontalAlignment="Right"
                   Text="User:">
        </TextBlock>
        <TextBox  Grid.Row="0"
                  Grid.Column="1"
                  Margin="5,5,5,0"
                  Name="_txtLogin" 
                  Text="{Binding Login}"/>
        <Button Grid.Row="1"
                Grid.Column="1" 
                Content="Ok"
                Width="100" 
                VerticalAlignment="Center" 
                HorizontalAlignment="Center" 
                Click="AutentificateClick" 
                Padding="0,2,0,2" 
                IsDefault="True" 
                Name="_btnOk" 
                />
    </Grid>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
private Boolean _isFirstTime = true;

        public Window2()
        {
            InitializeComponent();
            DataContext = this;
        }

        private void AutentificateClick(Object sender, RoutedEventArgs e)
        {
            _btnOk.IsEnabled = false;
            Cursor = Cursors.Wait;

            Task<Boolean>.Factory.StartNew(InitConnection).ContinueWith(t =>
            {
                if (!t.Result)
                    return;

                // Emulate some work after connection's been established
                Thread.SpinWait(1000000000);
                
                _btnOk.IsEnabled = true;
                Cursor = Cursors.Arrow;

            }, TaskScheduler.FromCurrentSynchronizationContext());
        }

        private Boolean InitConnection()
        {
            Thread.SpinWait(10000000);
            return true;

            if (_isFirstTime)
            {
                // Emulate some work to establish connection
                Thread.SpinWait(10000000);
                _isFirstTime = false;
            }
            
            return true;
        }



Текущий вариант кода работает как надо. Юзкейс - многократное нажатие на кнопку OK . Чтобы баг проявился нужно закомментарить строки.

Код: c#
1.
2.
        Thread.SpinWait(10000000);
        return true;



Тогда Cursor всегда будет вести себя как надо, т.е. менятся, а вот кнопка совершенно рандомно (но очень часто) не дисаблится. Это очередной баг впф-а или этому есть разумное объяснение?

.Net 4.0, Win 7
...
Рейтинг: 0 / 0
13.02.2015, 12:46
    #38879030
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Странности в UI в ContinueWith, если сам Task отрабатывает слишком быстро
жесть какая.
...
Рейтинг: 0 / 0
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Странности в UI в ContinueWith, если сам Task отрабатывает слишком быстро / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]