C# 使用动作委托更新VB.NET中的进度条
我使用此C代码从另一个线程更新winform上的进度条: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
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等效的操作。此外,他接受了一个答案并结束了问题。