相关疑难解决方法(0)

Invoke()和BeginInvoke()之间有什么区别

只是想知道BeginInvoke()和之间的区别Invoke()是什么?

主要是每个人将用于什么.

编辑:创建一个线程对象和调用invoke并只调用BeginInvoke()一个委托有什么区别?或者他们是一样的吗?

.net c# multithreading invoke begininvoke

383
推荐指数
6
解决办法
18万
查看次数

WPF Dispatcher.Invoke'hanging'

我有一个有点复杂的WPF应用程序,当尝试使用调度程序在UI线程上调用调用时,似乎是"挂起"或卡在Wait调用中.

一般过程是:

  1. 处理按钮上的单击事件
  2. 创建一个新线程(STA),其中:创建演示者和UI的新实例,然后调用Disconnect方法
  3. 断开然后在名为Name的UI上设置属性
  4. 然后,Name的setter使用以下代码来设置属性:

    if(this.Dispatcher.Thread != Thread.CurrentThread)
    {
        this.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate{
            this.Name = value; // Call same setter, but on the UI thread
        });
        return;
    }

    SetValue(nameProperty, value); // I have also tried a member variable and setting the textbox.text property directly.
Run Code Online (Sandbox Code Playgroud)

我的问题是,当调用 dispatcher invoke方法时,它似乎每次都挂起,并且callstack指示它处于休眠状态,等待或加入Invoke实现.

那么,有什么我做错了,我错过了,显而易见或没有,或者有更好的方法调用UI线程来设置这个属性(和其他)?

编辑:解决方案是在线程委托的末尾调用System.Windows.Threading.Dispatcher.Run()(例如,正在执行工作的地方) - 感谢所有帮助过的人.

.net c# wpf invoke dispatcher

21
推荐指数
3
解决办法
2万
查看次数

标签 统计

.net ×2

c# ×2

invoke ×2

begininvoke ×1

dispatcher ×1

multithreading ×1

wpf ×1