【发布时间】:2014-07-25 14:33:19
【问题描述】:
我正在尝试使用数据库中的表加载此组合框,一切正常,但记录很多,加载需要一分钟。我想把它移到一个单独的线程,但我不断得到交叉线程。我认为交叉线程正在发生 b/c 组合框在 ui 线程上。有谁知道实现这一目标的简单方法。
谢谢迈克尔
private void BindComboBox()
{
SqlConnection con = Program.GetConnection;
SqlDataAdapter da = new SqlDataAdapter("SELECT ContactId, FullName FROM dbo.Contact WHERE FULLNAME IS NOT NULL", con);
DataSet ds = new DataSet();
da.Fill(ds, "dbo.Contact");
SearchBOX.ItemsSource = ds.Tables[0].DefaultView;
SearchBOX.DisplayMemberPath = ds.Tables[0].Columns["FullName"].ToString();
SearchBOX.SelectedValuePath = ds.Tables[0].Columns["ContactId"].ToString();
SearchBOX.IsEnabled = true;
}
【问题讨论】:
-
围绕 UI 操作使用 Dispatcher.BeginInvoke。更好的是,只需绑定 ItemsSource 并在新线程中更新支持属性。
-
天哪,感谢您的回复
-
可以使用后台工作者在另一个线程上加载数据。然后在完成事件中将数据绑定到 UI 控件。只有主线程可以访问 UI 控件。那么你在 backgroundoworker 上的空白行上方是什么。
-
为什么不利用 WPF 最强大的方面之一 - 数据绑定?
标签: c# wpf wpf-controls