我有一个与这里类似的问题:WPF MVVM Light: Command.RaiseCanExecuteChanged() doesn't work,使用带有 WPF 的命令并且我的 GUI 无法工作,直到我单击屏幕中的某个位置。我不使用 MVVM Light。
我通过调用 ExternalDLL.Start() 调用外部 DLL 来执行某些操作,然后调用 GetStatus() 以了解操作是否已开始。如果我得到正确的状态作为回报,我改变了实际的行动,它必须激活我的 GUI 上的一个按钮。
在我单击某个地方之前,该按钮不会自行激活。
我检查了线程,但它似乎在同一个线程上,我试图将它放在 GUI 线程中,通过使用Application.Current.Dispatcher.BeginInvoke,但它也不起作用。
这是我的代码:
private async void StartScanCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
ExternalDLL.Start();
WaitForStarting();
}
private async void WaitForStarting()
{
Waiting();
Stopwatch chrono = new Stopwatch();
chrono.Start();
bool started = false;
while (chrono.ElapsedMilliseconds < 20000)
{
if (ExternalDLL.GetStatus() != ExternalDLL.Status.Started)
{
await Task.Delay(100);
}
else
{
started = true;
chrono.Stop();
StartedAction();
break;
}
}
if (!started)
{
MessageBox.Show("Error");
}
}
该Waiting()方法调用激活GUI和工作的按钮。但是StartedAction()也必须激活一个按钮,并且不起作用。
这是开始操作的代码:
private void StartedAction()
{
_actualAction = ActualAction.DoingAction;
}
这是按钮的可以执行方法:
private void SomeButtonCommand_CanExecute(object sender,
CanExecuteRoutedEventArgs e)
{
e.CanExecute = _actualAction == ActualAction.DoingAction;
}
我究竟做错了什么 ?
牛魔王的故事
潇潇雨雨
相关分类