【发布时间】:2013-01-02 16:02:16
【问题描述】:
我有一个使用线程的简单 WPF 应用程序。例如。在新线程中,我得到 DateTime,我想将它返回到主线程中的 TextBox。我读到这样做我必须使用 ControlDispatcher.Invoke 方法。但有些不对劲..
namespace Bizantyjskie
{
public static class ControlExtensions
{
public static void InvokeIfRequired(this Control control, Action action)
{
if (System.Threading.Thread.CurrentThread != control.Dispatcher.Thread)
control.Dispatcher.Invoke(action);
else
action();
}
public static void InvokeIfRequired<T>(this Control control, Action<T> action, T parameter)
{
if (System.Threading.Thread.CurrentThread != control.Dispatcher.Thread)
control.Dispatcher.Invoke(action, parameter);
else
action(parameter);
}
}
class watki
{
public watki(MainWindow mw)
{
_mw = mw;
}
public MainWindow _mw;
public void dzialaj()
{
Thread watek1 = new Thread(new ThreadStart(w1));
watek1.Start();
}
private void w1()
{
string godz = DateTime.Now.TimeOfDay.ToString();
ControlExtensions.InvokeIfRequired((value) => _mw.tb_w1.Text = value, godz);
}
}
}
问题出在
ControlExtensions.InvokeIfRequired((value) => _mw.tb_w1.Text = value, 神);
我遇到了一个错误。
无法将 lambda 表达式转换为类型 'System.Windows.Controls.Control' 因为它不是委托类型
【问题讨论】:
-
Lambda 语法错误,您想要更多类似于
ControlExtensions.InvokeIfRequired(() => { _mw.tb_w1.Text = godz });的内容,尽管这取决于InvokeIfRequired对方法签名的要求,您可以发布该方法的签名吗?你只是缺少括号吗?例如ControlExtensions.InvokeIfRequired((value) => { _mw.tb_w1.Text = value }, godz);
标签: c# wpf multithreading invoke