VB跨线程调用WPF控件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB跨线程调用WPF控件相关的知识,希望对你有一定的参考价值。
如图,在VB中建立一个线程,然后在这个线程中调用一个UI线程并改变这个线程。但是这样会报错,说非UI线程不可以调用UI线程。有没有人能给出解答方案!
使用委托和Invoke,下面是个VB的例子Delegate Sub SetTextCallback(ByVal pstrText As String)
Private Sub SbShowMessage(ByVal strMessage As String)
If Me.lbMessage.InvokeRequired Then
Dim d As New SetTextCallback(AddressOf SbShowMessage)
Me.Invoke(d, New Object() strMessage)
Else
lbMessage.Items.Add(Now.ToString("yyyy/MM/dd HH:mm:ss") & " " & strMessage & " ")
DoEvents()
lbMessage.SelectedIndex = lbMessage.Items.Count - 1
Dim intCounter As Integer
intCounter = lbMessage.Items.Count
If intCounter > 1000 Then
For i As Integer = 1 To intCounter - 1000
lbMessage.Items.RemoveAt(0)
Next
End If
End If 参考技术A VB不是那么稳定的了,
WPF中窗口控件的跨线程调用
原文:WPF中窗口控件的跨线程调用在WinForm中,我们要跨线程访问窗口控件,只需要设置属性CheckForIllegalCrossThreadCalls = false;即可。
在WPF中要麻烦一下,同样的不允许跨线程访问,因为没有权限,访问了会抛异常;
没有CheckForIllegalCrossThreadCalls 属性,怎么办?
在WPF中的窗口控件都有一个Dispatcher属性,允许访问控件的线程;既然不允许直接访问,就告诉控件我们要干什么就好了。
方法如下:
private delegate void outputDelegate(string msg);
private void output(string msg)
{
this.txtMessage.Dispatcher.Invoke(new outputDelegate(outputAction), msg);
}
private void outputAction(string msg)
{
this.txtMessage.AppendText(msg);
this.txtMessage.AppendText(" ");
}
这里是要 输出一段字符串在TextBox中,只需要调用output方法就可以了。其它的处理同上!
以上是关于VB跨线程调用WPF控件的主要内容,如果未能解决你的问题,请参考以下文章