0

我收到错误

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

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

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

我错过了另一个参考吗?

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

4

2 回答 2

9

WinForms 中没有Dispatcher

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

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

于 2013-04-23T14:38:30.710 回答
0

Dispatcher概念属于 WPF 技术,您在Winforms 上使用 Winforms,您可以使用它或控制 .Begin 或 BeginInvoke 这两者都类似于 Dispatcher.Begin 或 Dispatcher.BeginInvoke

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

于 2013-04-23T14:40:48.390 回答