当您在C#中进行数据绑定时,更改数据的线程也会导致控件更改。 但是,如果此线程不是创建控件的线程,则会出现非法交叉线程操作异常。

反正有没有阻止这个?

===============>>#1 票数:4

你应该可以这样做:

if (control.InvokeRequired)
{
    control.Invoke(delegateWithMyCode);
}
else
{
    delegateWithMyCode();
}

InvokeRequired是Controls上的一个属性,用于查看您是否在正确的线程上,然后Invoke将在正确的线程上调用该委托。

更新:实际上,在我上一份工作中,我们做了类似这样的事情:

private void SomeEventHandler(Object someParam)
{
    if (this.InvokeRequired)
    {
        this.Invoke(new SomeEventHandlerDelegate(SomeEventHandler), someParam);
    }

    // Regular handling code
}

这消除了对else块的需求和类型的紧张。

===============>>#2 票数:1

由于我没有测试用例,我不能保证这个解决方案,但在我看来,类似于用于更新不同线程(使用委托)中的进度条的方案在这里是合适的。

public delegate void DataBindDelegate();
public DataBindDelegate BindData = new DataBindDelegate(DoDataBind);

public void DoDataBind()
{
    DataBind();
}

如果数据绑定需要由特定线程完成,那么让该线程完成工作!

===============>>#3 票数:0

如果线程调用是“非法的”(即DataBind调用影响未在调用它的线程中创建的控件),那么您需要创建一个委托,以便即使DataBind的决策/准备工作没有在控制创建线程,它们的任何结果修改(即DataBind())将是。

您可以从工作线程调用我的代码,如下所示:

this.BindData.Invoke();

这将导致原始线程执行绑定,(假设它是创建控件的线程)应该工作。

===============>>#4 票数:0

在WPF和Silverlight中,绑定基础结构负责切换到UI线程。

  ask by gil translate from so

未解决问题?本站智能推荐:

4回复

复选框绑定 - 什么是更好的解决方案?

我的wpf格式中有20多个复选框。 我需要在一些对象中存储来自所有这些的IsChecked值。 我知道两种方式。 1)使用依赖属性将所有复选框绑定到对象中的相应属性,如此处所示 2)处理所有这些的Clicked事件 哪种解决方案更好? 是否有更好的解决方案在代码隐藏中
2回复

C#解决方案资源管理器中的XML文件

我有一个3D对象及其数据点。 数据由1000点组成。 以下是数据点。 XML文件必须位于解决方案资源管理器中,并且所有数据点必须能够从那里读取,而不是从外部文件(doc.LoadXml(_file)加载。 你能告诉我怎么做吗? 问候, 马克吐温
2回复

WPF文本框和浏览文件 - 有更优雅的解决方案吗?

我有一个简单的文本框+文件对话框方案。 文本框绑定到colooection中的对象。 我想选择文件并让它填充文本框,然后文本框将更新绑定的对象属性。 设法将文件名放入文本框,但文本框绑定没有触发,因为它没有检测到更改。 我不得不添加一个focus()更改来触发更新。 有没有更好的办法?
1回复

从DataGridView到本地SQL表中获取数据的最快/最简单的解决方案是什么?

我有一个带有几列数据的DataGridView(datagridview2)。 我有一个本地SQL数据库表(ResultsDB.sdf),我想将datagridview中的数据存储在其中。是否有快速的方法? 还是我需要读取DataGridView中的每一行并使用SQL语句将其写到SQL表中?
2回复

我觉得自己像是管道工厂里的老鼠。 设计WPF绑定解决方案的策略?

这么多死路一条! 我正在尝试在可视化和大约300个单字节数据的数组之间实现双向绑定。 这听起来很简单但事实并非如此。 看起来,Bea Stollnitz在将折线与数据绑定方面花费了三次: 第1 部分第2 部分第3部分 初学者有什么希望? 所以我的问题是: 您是
4回复

工作线程添加到BindingList时的跨线程操作异常

我有一个需要将项添加到BindingList的工作线程。 但是, BindingList被数据绑定到DataGridView 。 因此,当我尝试添加到列表中时,我得到一个InvalidOperationException (Cross-thread operation not valid:
1回复

如何在具有网站和表单应用程序的解决方案中从类库中管理数据连接?

这对我来说是个常见问题。 我有一个解决方案,其中包含一个或两个Form App,两个网站(Intranet,外部站点等)和一个类库,我要在其中存储要在上述其他项目之间共享的数据对象。 通常,我会将连接字符串存储在web.config和app.config文件中。 但是,对于类库,这实际
2回复

如何解决约束问题

我有一个控件,需要使用复选框来启用禁用部分,但我需要将此控件绑定到一个类上,因此我完成了以下操作。 所以我的问题是如何将绑定设置为例如IncidentBuilderProperty.IsEnabled之类的代码,我应该使用参数在后面进行编码。 但是在我的模型中,我具有以以下方式声明的i
2回复

如何解决MarkupExtension中数据绑定的值?

我已经为基于密钥的字符串翻译做了标记扩展。 例 现在我希望能够使用嵌套绑定来提供我的密钥。 例: 当我这样做时,我得到一个System.Windows.Data.Binding对象。 通过调用ProvideValue并传递ServiceProvider,我可以得到一个Bin
2回复

如何解决异步数据调用上的空UI绑定?

我已经向IEnumerable集合添加了绑定,该绑定是通过async方法调用填充的。 从远程数据库中检索数据,然后将其添加到CustomerOrders列表中。 但是运行该应用程序后,我的UI绑定未显示在视图上。 该视图未显示任何数据。 为了调试问题,我检查了以下内容: