Лучший способ сделать события асинхронными в C#

Упрощен список пропусков для конструктора DataFrame, тогда цикл не требуется:

df = pd.DataFrame([[100,200,300]], columns=['a', 'b', 'c'], index=range(100))
print (df.head())
     a    b    c
0  100  200  300
1  100  200  300
2  100  200  300
3  100  200  300
4  100  200  300

Но если нужно, нужно решение цикла:

df = pd.DataFrame(columns=['a', 'b', 'c'], index=range(100))
num = [100,200,300]
cols = ['a','b','c']

for c, val in zip(cols, num):
    df[c] = val
print (df.head())
     a    b    c
0  100  200  300
1  100  200  300
2  100  200  300
3  100  200  300
4  100  200  300
15
задан Niklas Winde 17 September 2008 в 06:56
поделиться

5 ответов

Hmmm, я использовал различные сценарии, которые зависели от того, в чем я нуждался в то время.

я полагаю, что BeginInvoke, вероятно, было бы самым легким кодировать, так как Вы почти там. Так или иначе необходимо использовать уже, Вызывают, поэтому просто изменившись на BeginInvoke. Используя обратный вызов на отдельном потоке выполнит то же самое (как долго, поскольку Вы используете пул потоков для стояния в очереди обратного вызова) как использование BeginInvoke.

3
ответ дан 1 December 2019 в 04:48
поделиться

События всего делегаты , так используйте BeginInvoke. (см. Делать Асинхронные вызовы метода в Среде.NET )

1
ответ дан 1 December 2019 в 04:48
поделиться

Так как Вы используете форму, более легкий путь состоит в том, чтобы использовать компонент BackgroundWorker.

класс BackgroundWorker позволяет Вам выполнять операцию на отдельном, специализированном потоке. Трудоемкие операции как загрузки и транзакции базы данных могут заставить Ваш пользовательский интерфейс (UI) казаться, как будто он прекратил отвечать, в то время как они работают. Когда Вы хотите быстро реагирующий UI, и Вы сталкиваетесь с длительными задержками, связанными с такими операциями, класс BackgroundWorker предоставляет удобное решение.

8
ответ дан 1 December 2019 в 04:48
поделиться

У Вас есть несколько опций, как уже детализировано, но по моему опыту, Вы - более обеспеченные делегаты отъезда и BeginInvoke и использование BackgroundWorker вместо этого (v2.0 +), поскольку это легче использовать и также позволяет Вам взаимодействовать с основной формой на завершении потока. В целом, очень weel используемое решение, я нашел.

0
ответ дан 1 December 2019 в 04:48
поделиться

Система. ComponentModel. BackgroundWorker является действительно хорошей начальной точкой. Это сделает Вашу асинхронную работу, даст Вам уведомления о важных событиях и имеет способы лучше интегрироваться с Вашими формами.

, Например, можно активировать уведомления о прогрессе путем регистрации обработчика для события ProgressChanged. (который настоятельно рекомендован, если у Вас есть долгий, асинхронный процесс, и Вы не хотите, чтобы Ваш пользователь думал, что приложение заморозилось)

0
ответ дан 1 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

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