为什么 BackgroundWorker 总是忙?
在我的申请中我理解了我的背景员工奇怪的东西 WPF.
我现在想要做什么 - 这将等待结束 BW, 开始另一个流。
检查以下代码:
请注意,我添加了 Dispatcher.Invoke, 等到 bw 不会忙,但一直都很忙,如果我打电话给他,永远不会发射一个活动
. 虽然如果我删除这条线, FIRES 事件,它真的很奇怪。
我怎样才能等待 bw 完成的?
我现在想要做什么 - 这将等待结束 BW, 开始另一个流。
检查以下代码:
if /bw.IsBusy/
{
bw.CancelAsync//;
System.Threading.ThreadStart WaitThread =
new System.Threading.ThreadStart/delegate// {
while /bw.IsBusy/
{
System.Threading.Thread.Sleep/100/;
}
bw.RunWorkerAsync//;
}/;
System.Windows.Application.Current.Dispatcher.Invoke/
System.Windows.Threading.DispatcherPriority.Normal,
WaitThread/; // if I remove this line, bw fires RunWorkerAsyncEvent
}
else
{
bw.RunWorkerAsync//;
}
请注意,我添加了 Dispatcher.Invoke, 等到 bw 不会忙,但一直都很忙,如果我打电话给他,永远不会发射一个活动
RunWorkerAsyncCompleted
. 虽然如果我删除这条线, FIRES 事件,它真的很奇怪。
我怎样才能等待 bw 完成的?
没有找到相关结果
已邀请:
4 个回复
小明明
赞同来自:
但是你的主流没有空闲,它在循环内陷入困境 while//, 等待什么时候 IsBusy 多窝白 false. 因此,永远无法启动事件,因为主流忙于等待完成 BGW, 和 BGW 它无法完成,因为主流从未站立。 "致命的武器", 他是一个死胡同。
你必须以不同的方式做到,你不能等待。 说,创建另一个副本 BGW. 或等待事件处理程序后移动代码 RunWorkerCompleted. 如果它被激活,假设,按下按钮的事件,请务必在呼叫时断开按钮 RunWorkerAsync//, 重新启用它 RunWorkerCompleted.
冰洋
赞同来自:
这是我目前在类似的场景中使用的,它似乎扮演咒语!
君笑尘
赞同来自:
BackgroundWorker
/因此,如果他忙,你第一次停止它,然后再次运行/, 如果这是你想要的,请尝试:
宣布这一点
代表
你班上的某个地方:
并使用此代码重新启动您的代码
BackgroundWorker
:
董宝中
赞同来自:
C# /窗口类
/
XAML