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

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


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