虽然我有一些脚本编写经验(VBscript,PowerShell,批处理,shell等),但我不是程序员。我只是要求你善待!
短
作为VB.NET的新手,在将Microsoft.Bcl.Async包含到项目中之后,我需要帮助将Await / Async .NET 4.5代码重写为.NET 4.0兼容代码。这是修改后的.NET 4.5代码:
Imports System
Imports System.IO
Imports System.Diagnostics
Imports System.Security.Principal
Private Sub buttonName_Click(sender As Object, e As EventArgs) Handles buttonName.Click
// Do a bunch of stuff
// like assign values of text boxes to variables
// validate input to a certain degree
// Run command
RunProcess("someexe.exe", "plenty of argments")
End Sub
Private Async Sub RunProcess(ByVal Command As String, Optional ByVal Arguments As String = "NOTSET")
// Function to disable all the fields and buttons
LockUI()
// Sow the progress bar
// Start the progress marquee so people know something's happening
ProgressBar1.Visible = True
ProgressBar1.Style = ProgressBarStyle.Marquee
ProgressBar1.MarqueeAnimationSpeed = 60
ProgressBar1.Refresh()
// Prepare process
Dim Execute As Process
If Arguments = "NOTSET" Then
Execute = Process.Start(Command)
Else
Execute = Process.Start(Command, Arguments)
End If
// Run the process and wait for it to finish
Await Task.Run(Sub() Execute.WaitForExit())
// Do some other stuff like check return code etc.
// Display positive msgbox for success
// Display failure message box for, well, failures
// Hide progress bar since we're done
ProgressBar1.Visible = False
// Unlock all the fields
UnlockUI()
End Sub
长:
我在Visual Studio Premium 2013中为基于控制台/命令行的应用程序编写了一个非常简单的GUI包装器。它实际上只是一个VB Windows窗体应用程序,带有一些用于用户输入的文本框和两个执行操作的按钮。当按下任一按钮时,它会执行命令,并从文本框中拉出参数,并在其运行时显示选框进度条something I needed help with recently。
效果很好,我很激动而且非常thankful。但是,我刚刚了解到这些将在上使用的机器只有.NET 4.0 ,并且没有时间推出.NET 4.5。我看到我可以在项目中更改目标框架的位置,但在查看了一些资源(Link 1,Link 2,Link 3)后,我不知道如何重新编写代码与Microsoft.Bcl.Async一起使用。
答案 0 :(得分:2)
在Microsoft.Bcl.Async
NuGet包中,许多成员被放置在TaskEx
类型上(当然,因为NuGet包不能更改Task
类型)。
在您的情况下,您可以将Task.Run
更改为TaskEx.Run
。
如果您需要更多建议,Async Sub
方法应仅用作事件处理程序。因此,将RunProcess
定义为返回Task
并从Await
获取Async Sub buttonName_Click
来更合适。有关详细信息,请参阅我的MSDN article on async best practices。