編碼:
StartOperation = ReactiveCommand.CreateFromObservable(() => Observable.Start(() =>
{
SelectedOperation.State = OperationState.ACTIVE.ToString();
checkboxService.SaveChanges();
}));
導致系結處理程式看似隨機地被呼叫,而:
StartOperation = ReactiveCommand.Create(() =>
{
Interactions.Confirm.Handle(new MessageBoxArguments { CanCancel = false, IsWarning = false, Message = "Operation started!", Title = "Success" }).Subscribe(x =>
{
SelectedOperation.State = OperationState.ACTIVE.ToString();
checkboxService.SaveChanges();
});
});
完美運行。我認為這是由于調度造成的,但我認為在這兩種情況下,代碼都將被調度為以相同的方式運行,除了在第二個示例中,首先顯示一個訊息框。也許延遲使事情正常作業?
該專案是 .Net Standard 上的 Winforms(我知道),而 ReactiveUI 是 17.1.50。
我會很高興在這里得到一些指示!
uj5u.com熱心網友回復:
所以事實證明,它在第二個示例中起作用的原因不是因為調度,而是因為顯示 MessageBox,迫使 UI 更新事件。
之所以需要這樣做,是因為觸發 StartOperation 的按鈕也受 SelectedOperation.State 更新的影響(啟用屬性依賴于此),看起來流程是這樣的:
- 單擊觸發 StartOperation (OnClick)
- 然后更新 SelectedOperation.State
- 這會觸發各種系結,最終導致 Enabled 屬性的更新
- 這不能很好地/可預測地作業,因為按鈕處于某種過渡狀態觸發事件等等。
簡而言之,解決方案是確保在該鏈中的某個位置呼叫 Application.DoEvents(),從而強制按鈕退出它所處的任何狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/489801.html
上一篇:如何在c#中進行友好的cpu回圈
下一篇:程式沒有正確添加數字
