从VB主方法调用C#库中的异步方法
我的应用程序是用VB.net编写的,由于我无法控制的原因,我无法更改该技术。我正在尝试使用AWS S3存储桶来存储文件。我在VB中的应用程序将需要显示一个窗口,其中列出了存储桶中的文件,并允许用户下载它们 S3中的文件列表是使用C#通过从VB主方法调用C#库中的异步方法,c#,vb.net,amazon-s3,C#,Vb.net,Amazon S3,我的应用程序是用VB.net编写的,由于我无法控制的原因,我无法更改该技术。我正在尝试使用AWS S3存储桶来存储文件。我在VB中的应用程序将需要显示一个窗口,其中列出了存储桶中的文件,并允许用户下载它们 S3中的文件列表是使用C#通过异步任务完成的 现在,当我尝试运行我的VB项目时,我得到一个错误,说项目中没有Main方法。有什么方法可以从VBMain方法调用Async方法(ListalContentsAsync)吗?只需将其同步: Sub Main() Dim objcsClass
异步任务完成的
现在,当我尝试运行我的VB项目时,我得到一个错误,说项目中没有Main
方法。有什么方法可以从VBMain
方法调用Async
方法(ListalContentsAsync
)吗?只需将其同步:
Sub Main()
Dim objcsClass = New CallMeFromVB.ClassInCSharpProject()
Dim inputChar As ConsoleKeyInfo = Console.ReadKey()
Dim contents As New List(Of String)
contents = objcsClass.listAllContentsAsync().GetAwaiter().GetResult()
For Each content As String In contents
Console.Write(content & " ")
Next
End Sub
只需将其同步:
Sub Main()
Dim objcsClass = New CallMeFromVB.ClassInCSharpProject()
Dim inputChar As ConsoleKeyInfo = Console.ReadKey()
Dim contents As New List(Of String)
contents = objcsClass.listAllContentsAsync().GetAwaiter().GetResult()
For Each content As String In contents
Console.Write(content & " ")
Next
End Sub
你看了吗?谢谢@Dhawalk,但这是一个C#main方法调用另一个C#Async方法的解决方案。我无法在VB中使用上述问题中描述的Nito.Asyncx。我建议使用相同的模式。我还没有尝试过“VB不是AWS SDK中的一个选项”-嗯?最后我知道AWS SDK是一个编译过的nuget包;它是用什么风格的.net编写的/它是用什么风格的.net使用的并不重要。SDK在C#和VBC#中同样有效,VB.NET都是在.NET平台上运行的语言。它们可以使用以其中一种方式编写的程序集,因为所有程序集都可以编译为。你经常只看到C#教程,因为C#是更流行的语言。如果你打算在VB.NET中开发,至少学习如何阅读C,这样你就能理解教程和文档。你看过了吗?谢谢@Dhawalk,但这个解决方案是针对一个C主方法调用另一个C异步方法。我无法在VB中使用上述问题中描述的Nito.Asyncx。我建议使用相同的模式。我还没有尝试过“VB不是AWS SDK中的一个选项”-嗯?最后我知道AWS SDK是一个编译过的nuget包;它是用什么风格的.net编写的/它是用什么风格的.net使用的并不重要。SDK在C#和VBC#中同样有效,VB.NET都是在.NET平台上运行的语言。它们可以使用以其中一种方式编写的程序集,因为所有程序集都可以编译为。你经常只看到C#教程,因为C#是更流行的语言。如果你打算在VB.NET中开发,至少学习如何阅读C,这样你就能理解教程和文档。我不确定这是否需要通过GetAwaiter
来完成?由于结果是一个任务
我想你可以直接在任务上使用结果
。如果它出错,通过。结果
它将被包装在一个聚合异常中-我不想给一个似乎不太精通TAP的OP增加另一个麻烦。我不确定这是否需要通过GetWaiter
完成?由于结果是一个任务
我想你可以直接在任务上使用结果
。如果它出错,通过。结果
它将被包装在一个聚合异常中-我不想为一个似乎不太精通TAP的OP再添麻烦
Sub Main()
Dim objcsClass = New CallMeFromVB.ClassInCSharpProject()
Dim inputChar As ConsoleKeyInfo = Console.ReadKey()
Dim contents As New List(Of String)
contents = objcsClass.listAllContentsAsync().GetAwaiter().GetResult()
For Each content As String In contents
Console.Write(content & " ")
Next
End Sub