C# 使用动作委托更新VB.NET中的进度条

C# 使用动作委托更新VB.NET中的进度条,c#,vb.net,C#,Vb.net,我使用此C代码从另一个线程更新winform上的进度条: progressBar1.Invoke((Action)(() => progressBar1.Value = someinteger)); 它在VB.NET中的确切等价物是什么 当我单击winform上的按钮时,它会异步运行函数。 这是全部代码,我尝试了以上两个答案,但都不起作用 次重任务 对于j=0到1000000 "任务很重, Dim percentdone作为整数=100*j+1/1000000 "这个计划没有进展, 'P

我使用此C代码从另一个线程更新winform上的进度条:

progressBar1.Invoke((Action)(() => progressBar1.Value = someinteger));
它在VB.NET中的确切等价物是什么

当我单击winform上的按钮时,它会异步运行函数。 这是全部代码,我尝试了以上两个答案,但都不起作用

次重任务 对于j=0到1000000 "任务很重, Dim percentdone作为整数=100*j+1/1000000 "这个计划没有进展, 'ProgressBar1.InvokeNew ActionSub ProgressBar1.Value=percentdone '这将在for循环完成后更新progressbar,而不是在每次迭代时更新 'ProgressBar.InvokeSub ProgressBar1.Value=percentdone 下一个 端接头 私有子按钮1\u单击发件人作为对象,e作为事件args处理按钮1。单击 将t1设置为任务。任务 t1=新任务。任务次重任务 t1.开始 t1.等等 MessageBox.Showtask已完成 端接头 我很抱歉没有提供完整的代码。

试试这个

progressBar1.Invoke(New Action(Sub() progressBar1.Value = someinteger))
ProgressBar.Invoke(Sub() ProgressBar1.Value = newvalue)

谢谢大家花时间回答我愚蠢的问题 因为我已经异步运行了函数, 我只需要使用这个代码

ProgressBar1.Value=完成百分比


多谢各位

最后,在搜索和尝试了hrs之后,决定这样做。 感谢大家的帮助:

次重任务

For j = 0 To 1000000

    ' some heavy task
    Dim percentdone As Integer = (100 * (j + 1)) / 1000000

    ProgressBar.Invoke(Sub() ProgressBar1.Value = percentdone )

Next End Sub
私有子按钮1\u单击发送者作为对象,e作为事件参数句柄 按钮1.单击

Dim thread1 As New Thread(AddressOf heavy_task)
    thread1.Start()


If thread1.IsAlive = False Then            
        MessageBox.Show("task complete")
    End If 
端接头


progressBar1.InvokeSub progressBar1.Value=someinteger例如。感谢您回答我的问题。它吸引了我的眼球,您对它进行了评论,这不可能是正确的。您的代码不是异步运行的;它在任务中运行,这意味着它在不同于UI线程的线程中执行。更新进度条的代码部分应该在不使用Invoke的情况下抛出InvalidOperationException。是的,你是对的,我又犯了错误,我刚才注意到了。由于progressbar没有更新,我同步运行了该函数。也就是说,它正在工作并且没有给出错误:|那么我应该如何异步运行函数并更新progressbar?如果每次迭代都太快,那么在下次更新之前,进度条将没有时间重新绘制自己。如果是这种情况,您最好将进度存储在类级变量中,并通过System.Windows.Forms.Timer更新进度栏,在执行此操作时轮询该变量,您也不需要调用Invoke,因为计时器已在UI线程上运行。谢谢。我会试试看。一个解释将是伟大的,以了解什么问题在这里,并进一步验证您的解决方案。如果我是来寻找解决方案的,这个答案不能解释任何事情。@đěxě341;:这个问题和答案应该是不言自明的。当问题是VB.NET中的确切等价物是什么时,你在寻找什么样的解释?我尝试了上述两个答案,但都不起作用,我相信我会在我的答案中解决这个问题。显然,这不是因为它不适用于OP。@mm8不,我的意思是顶部的OP帖子,而不是你的答案。你问当问题是。。。我试图解释,应该有一个解释,为什么它不适用于op:@đěxěŕ:你读了原始问题了吗?再读一遍。OP询问如何在VB.NET中执行与在C中调用Invoke等效的操作。此外,他接受了一个答案并结束了问题。