При запуске асинхронного / ожидающего кода в winform он блокирует пользовательский интерфейс Winform, но работает при запуске в режиме консоли - PullRequest
0 голосов
/ 21 мая 2018

У меня есть кусок кода, который я создал, который отлично работает при запуске из консольного приложения, и не работает, когда проект является приложением winform.Ниже приведен код, который использует библиотеку, которую вы можете получить из 'nuget', называемой bandwidth 3.1.5 , эта библиотека позволяет вам вызывать их оставшийся API, используя эту библиотеку для отправки тестовых SMS-сообщений и т. Д.Я создаю эту функцию для асинхронного запуска в надежде на исправление проблемы при запуске в синхронном режиме при запуске из приложения winform. Она блокируется. Кажется, она работает так же, когда работает асинхронно, или я просто что-то не так сделал?

''' <summary>
''' Gets a list of your numbers.
''' </summary>
''' <param name="size">Optional: Used for pagination to indicate the size of each page requested for querying a
''' list of phone numbers. If no value is specified the default value is 25. (Maximum value 1000)</param>
''' <param name="name">Optional: Used to filter the retrieved list of numbers allocated for the authenticated user by it’s name.</param>
''' <param name="applicationId">Optional: Used to filter the retrieved list of numbers by an associated application ID.</param>
''' <param name="state">Optional: Used to filter the retrieved list of numbers allocated for the authenticated user by a US state.</param>
''' <param name="city">Optional: Used to filter the retrieved list of numbers allocated for the authenticated user by it’s city.</param>
''' <param name="numberState">Optional: Used to filter the retrieved list of numbers allocated for
''' the authenticated user by the number state. <seealso cref="Bandwidth.Net.Api.PhoneNumberState"/></param>
''' <returns></returns>
Public Shared Async Function GetListOfPhoneNumbers(ByVal size As Integer?, ByVal name As String, ByVal applicationId As String,
    ByVal state As String, ByVal city As String, ByVal numberState As Api.PhoneNumberState?) As Threading.Tasks.Task(Of List(Of Api.PhoneNumber))

    Dim objClient As New Client(CommonApplication.BandWidth_USER_ID,
        CommonApplication.Bandwidth_API_TOKEN, CommonApplication.Bandwidth_API_SECRET)

    Dim objQuery As New Api.PhoneNumberQuery With
        {
            .Size = size,
            .Name = name,
            .ApplicationId = applicationId,
            .State = state,
            .City = city,
            .NumberState = numberState
        }

    Dim objResponse = Await System.Threading.Tasks.Task.Run(
        Function()
            Dim response = objClient.PhoneNumber.List(objQuery)

            Return response.ToList()
        End Function)

    Return objResponse
End Function

1 Ответ

0 голосов
/ 24 мая 2018

хорошо, я понял, если кто-то столкнется с той же проблемой, вы можете узнать об async / await при использовании в winform, взглянув на:

Async и Await Стивен Клири

...