我试图运行这2个线程来控制撤销和重做按钮是否启用,但我得到的交叉线程无效,我试图创建一个调用,但我无法使用按钮
这是我的代码
private Thread _undoThread;
private Thread _redoThread;
_undoThread = new Thread(UndoEnabledCheck);
_undoThread.Start();
_redoThread = new Thread(RedoEnabledCheck);
_redoThread.Start();
private void UndoEnabledCheck()
{
UndoButton.Enabled = _undoBuffer.CanUndo;
}
private void RedoEnabledCheck()
{
RedoButton.Enabled = _undoBuffer.CanRedo;
}
答案 0 :(得分:3)
这样做的原因是除非您在表格的主题上,否则您不能对表格做任何事情。然后,这将使用标准的Form调度线程。要从另一个线程更新表单,您必须使用Form.Invoke方法。
答案 1 :(得分:0)
您无法从UI线程以外的线程更新UI。您需要重新委派操作。尝试使用控件上提供的Invoke()方法,甚至是表单本身。
答案 2 :(得分:0)
如果您使用的是WPF,则必须使用Application的Dispatcher对象调用UI线程:
Application.Current.Dispatcher.BeginInvoke(() =>
{
UndoButton.Enabled = _undoBuffer.CanUndo;
});