没有调度员的定义

时间:2013-04-23 14:33:12

标签: c# winforms dispatcher

我收到了错误

  

'socketServer.Form1'不包含'Dispatcher'的定义,并且没有扩展方法'Dispatcher'接受类型'socketServer.Form1'的第一个参数可以找到

private void tbAux_SelectionChanged(object sender, EventArgs e)
{
    this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate()
    {
        textBox.Text = tbAux.Text;
    }
    );
}

根据documentationDispatcher类是我正在使用的命名空间System.Windows.Threading的一部分。

我错过了另一个参考资料吗?

如果它是相关的,我在使用服务器/客户端套接字收到“跨线程操作无效”的错误后添加了这个。

2 个答案:

答案 0 :(得分:6)

WinForms中没有Dispatcher

为了发布异步UI更新(这正是Dispatcher.BeginInvoke所做的),只需使用this.BeginInvoke(..)这是来自Control基类的方法。 在你的情况下你可以有这样的东西(从MSDN pattern采用):

private delegate void InvokeDelegate();
private void tbAux_SelectionChanged(object sender, EventArgs e)
{
   this.BeginInvoke(new InvokeDelegate(HandleSelection));
}
private void HandleSelection()
{
   textBox.Text = tbAux.Text;
}

如果您想要同步更新,请使用this.Invoke

答案 1 :(得分:0)

Dispatcher概念属于WPF技术,你在Winforms上使用Winforms,你可以使用它或控制.Begin或BeginInvoke这两个都是Similer to Dispatcher.Begin或Dispatcher.BeginInvoke

基本上这两个都来自Delegate类,它在运行时由CLR为您实现。