Wpf中MethodInvoker的替代方法是什么?
在windows form
我使用此代码
private void msg()
{
if (this.InvokeRequired)
this.Invoke(new MethodInvoker(msg));
else
textBox1.Text = textBox1.Text + Environment.NewLine + " >> " + readData;
在WPF中,我使用Dispatcher.CheckAccess()
代替this.InvokeRequired
,但wpf中没有Dispatcher.MethodInvoke()
或Dispatcher.Inovke.MethodInvoke()
如果有人将mycode转换为WPF,那将是非常好的
修改:
未知字符
答案 0 :(得分:0)
然后你可以用这个:
public static class TextBoxExtensions
{
public static void CheckAppendText(this TextBoxBase textBox, string msg, bool waitUntilReturn = false)
{
Action append = () => textBox.AppendText(msg);
if (textBox.CheckAccess())
{
append();
}
else if (waitUntilReturn)
{
textBox.Dispatcher.Invoke(append);
}
else
{
textBox.Dispatcher.BeginInvoke(append);
}
}
}
并称之为
private void msg()
{
textBox1.CheckAppendText(Environment.NewLine + " >> " + readData);
}
从后台线程更新UI时,通常应使用BeginInvoke
而不是Invoke
来避免挂起等待UI线程处理请求的可能性,而该线程又是等待后台线程的东西。
答案 1 :(得分:0)
这是WPF中MethodInvoker和UI线程的基本对应代码:
if (control.Dispatcher.CheckAccess())
UpdateUI();
else
control.Dispatcher.Invoke(new Action(UpdateUI));