我有一个线程可以从xml文件中检索信息。在我的主要形式中,我有一个复选框,如果xml中的布尔值为true,则必须由线程检查。我创建了一个Delegate,但是尽管如此,当线程尝试更改复选框的值时,仍引发System.InvalidOperationException。为什么?!?
private delegate void ProjectFileReloadDelegate(string pp);
private void ProjectFileReload(string projectPath)
{
if (this.InvokeRequired)
{
this.Invoke(new ProjectFileReloadDelegate(ProjectFileReload), projectPath);
}
else
{
//This throws the exception
//I retrive the anchorMode Info
anchorMode.Checked = ProjectOptions_v000.AnchorMode;
}
答案 0 :(得分:0)
我在后台使用了许多Task处理一些api调用,然后在更新GUI时必须使用带有调用的委托,我的参考来自Microsoft,标题为“指定同步上下文” TaskScheduler.FromCurrentSynchronizationContext()告诉它在gui线程上运行。
private delegate void ProjectFileReloadDelegate(string pp);
private void ProjectFileReload(string projectPath)
{
if (this.InvokeRequired)
{
this.Invoke(new ProjectFileReloadDelegate(ProjectFileReload), projectPath);
}
else
{
//This throws the exception
//I retrive the anchorMode Info
Task.Factory.StartNew(
delegate {
anchorMode.Checked = ProjectOptions_v000.AnchorMode;
}, TaskScheduler.FromCurrentSynchronizationContext()
);