Асинхронный метод не работает [дубликат]

Перечисление возможностей, разрешенных грамматикой:

>>> seq[:]                # [seq[0],   seq[1],          ..., seq[-1]    ]
>>> seq[low:]             # [seq[low], seq[low+1],      ..., seq[-1]    ]
>>> seq[:high]            # [seq[0],   seq[1],          ..., seq[high-1]]
>>> seq[low:high]         # [seq[low], seq[low+1],      ..., seq[high-1]]
>>> seq[::stride]         # [seq[0],   seq[stride],     ..., seq[-1]    ]
>>> seq[low::stride]      # [seq[low], seq[low+stride], ..., seq[-1]    ]
>>> seq[:high:stride]     # [seq[0],   seq[stride],     ..., seq[high-1]]
>>> seq[low:high:stride]  # [seq[low], seq[low+stride], ..., seq[high-1]]

Конечно, если (high-low)%stride != 0, то конечная точка будет немного ниже high-1.

Если stride отрицательно, порядок изменяется немного, так как мы отсчитываем:

>>> seq[::-stride]        # [seq[-1],   seq[-1-stride],   ..., seq[0]    ]
>>> seq[high::-stride]    # [seq[high], seq[high-stride], ..., seq[0]    ]
>>> seq[:low:-stride]     # [seq[-1],   seq[-1-stride],   ..., seq[low+1]]
>>> seq[high:low:-stride] # [seq[high], seq[high-stride], ..., seq[low+1]]

Расширенные нарезки (с запятыми и эллипсами) в основном используются только специальными структурами данных (например, Numpy) ; основные последовательности не поддерживают их.

>>> class slicee:
...     def __getitem__(self, item):
...         return `item`
...
>>> slicee()[0, 1:2, ::5, ...]
'(0, slice(1, 2, None), slice(None, None, 5), Ellipsis)'
61
задан l46kok 24 July 2012 в 07:20
поделиться

3 ответа

Вы можете использовать

Dispatcher.Invoke(Delegate, object[])

на диспетчере Application (или любого UIElement).

Вы можете использовать его, например, следующим образом:

Application.Current.Dispatcher.Invoke(new Action(() => { /* Your code here */ }));

или

someControl.Dispatcher.Invoke(new Action(() => { /* Your code here */ }));
131
ответ дан Botz3000 25 August 2018 в 23:45
поделиться

Лучший способ сделать это - получить SynchronizationContext из потока пользовательского интерфейса и использовать его. Этот класс абстрагирует марширование вызовов на другие потоки и упрощает тестирование (в отличие от прямого использования WPF Dispatcher). Например:

class MyViewModel
{
    private readonly SynchronizationContext _syncContext;

    public MyViewModel()
    {
        // we assume this ctor is called from the UI thread!
        _syncContext = SynchronizationContext.Current;
    }

    // ...

    private void watcher_Changed(object sender, FileSystemEventArgs e)
    {
         _syncContext.Post(o => DGAddRow(crp.Protocol, ft), null);
    }
}
32
ответ дан Eli Arbel 25 August 2018 в 23:45
поделиться

Используйте [Dispatcher.Invoke (DispatcherPriority, Delegate)] для изменения пользовательского интерфейса из другого потока или из фона.

Шаг 1. Используйте следующие пространства имен

using System.Windows;
using System.Threading;
using System.Windows.Threading;

Шаг 2. Поместите следующую строку, где вам нужно обновить UI

Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate
{
    //Update UI here
}));

Синтаксис

[BrowsableAttribute(false)]
public object Invoke(
  DispatcherPriority priority,
  Delegate method
)

Параметры

priority

Тип: System.Windows.Threading.DispatcherPriority

Приоритет относительно других ожидающих операций в очереди событий диспетчера вызывает указанный метод.

] method

Тип: System.Delegate

Делегат метода, который не принимает аргументов, который помещается в очередь событий диспетчера.

Возврат Значение

Тип: System.Object

Возвращаемое значение вызываемого делегата или null, если у делегата нет возвращаемого значения.

Информация о версии

Доступно с .NET Framework 3.0

3
ответ дан Vineet Choudhary 25 August 2018 в 23:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: