WPF中调用线程无法访问此对象,因为另一个线程拥有该对象 的解决方法

在WPF应用中,由于线程同步问题,可能会遇到'调用线程无法访问此对象,因为另一个线程拥有该对象'的错误。解决方法通常涉及使用委托来更新UI。此外,当函数求值超时导致禁用后,需要特定的处理以重新启用函数求值。通过调整代码并参考他人解决方案,可以成功解决这类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         在调试中,出现这个错误的原因,我在网上查了很多。大体上总结一下是:   两个或多个线程操作一个控件所引起的问题。

         在WPF中,UI分创建线程和访问线程。所以需要用委托机制来解决。


如果要在另一个线程中修改控件的Text属性(例如:ListBox控件类型的 lbConnected),如果直接写:lbStatus.Items.Add(str);    的话就会出现上述错误。  

       解决如下:

       添加一个 AddStringToListBox  函数:

private delegate void AddStringToListBoxDelegate(string str);
        /// <summary>
        /// 在ListBox中追加状态信息
        /// </summary>
        /// <param name="str">要追加的信息</param>
        private void AddStringToListBox(string str)
        {
            if (!lbStatus.Dispatcher.CheckAccess())
            {
                AddStringToListBoxDelegate d = AddStringToListBox;
                lbStatus.Dispatcher.Invoke(d, str);
            }
            else
            {
                lb
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值