【问题标题】:WPF Combo box UnresponsiveWPF 组合框无响应
【发布时间】:2015-11-09 06:41:20
【问题描述】:

我正在从 WCF 服务调用数据并在我的 WPF 应用程序中填充一个组合框。一旦我导航到组合框的位置,页面就会冻结,或者有时我可以打开组合框但它也会冻结?

WPF

 private async void Window_Loaded(object sender, RoutedEventArgs e)
        {
            using (TruckServiceClient TSC = new TruckServiceClient())
            {
                await LoadPhase(TSC, cmbtest);

            }

    private async Task LoadPhase (TruckServiceClient TSC, ComboBox combobox)
    {
        List<Phasetems> phasetems = new List<Phasetems>();
        foreach (var item in await TSC.GetphaseAsync())
            phasetems.Add(new Phasetems { Phase = item.Phase });
        combobox.ItemsSource = (phasetems.ToArray());
        combobox.IsEnabled = true;
        combobox.SelectedIndex = 1;
    }

    public class Phasetems
    {
        public int Id { get; set; }

        public string Phase { get; set; }

        public override string ToString()
        {
            return Phase;
        }
    }

WCF

public List<RPhases> Getphase()
        {
            List<RPhases> phases = new List<RPhases>();
            List<RPhases> dbphase;

            using (TruckDb db = new TruckDb())
                dbphase = db.RPhases.Where(x => x.Id != null).ToList();
            foreach (var a in dbphase)
            {
                var items = new RPhases
                {
                   Id = a.Id,
                   Phase = a.Phase 
                };
                phases.Add(items);
            }
            return phases;
        }

【问题讨论】:

  • 你确定是挂了还是后台隐藏了异常?每当您想从后台线程(即组合框)更新控件时,都需要调用 CheckAccess/BeginInvoke
  • await 的默认行为是返回调用异步方法的线程。所以他不需要打电话给 CheckAccess 左右。 @RGdent:会不会有其他东西阻塞了 ui 线程?另一个 Loaded-handler 左右?
  • 不,根本没有任何其他加载器@christoph,不仅组合框冻结,程序也冻结。
  • 列表很大吗?您可能需要虚拟化:stackoverflow.com/questions/8198645/…
  • 您是否在没有服务调用的情况下尝试过?只是为了确保没有其他东西阻塞?

标签: c# wpf wcf combobox


【解决方案1】:

您发布的代码是正确的,并且不会创建那种 ui 阻塞行为(据我所知)。

确保没有其他东西阻塞 ui 线程。在没有服务调用的情况下尝试一下,看看它是否仍然阻塞它。

您可以使用 Visual Studio 中断功能来单步运行代码并找出它在哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多