【发布时间】:2011-09-03 15:52:40
【问题描述】:
我正在 vb2010 express 中使用 wpf 和 vb.net 制作应用程序,但遇到一个让我发疯的问题。
我有一个每分钟执行一次后台工作程序的计时器:
Private Sub timer_Tick() Handles timer.Tick
If Not bworker.IsBusy Then
bworker.RunWorkerAsync()
End If
End Sub
backgroundworker 正在使用 xmlelement 和 xmldataprovider:
Private Sub bworker_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bworker.DoWork
Dim source As XmlDataProvider = Application.Current.Resources("r1")
Dim sometext As String = "something"
Dim elemento As XmlElement = source.Document.CreateElement("elemento")
elemento.InnerText = sometext
e.Result = elemento
End Sub
然后我在 RunWorkerComplete 上使用 e.Result 将 XmlElement 添加到源。我第一次执行 backgroundworker 时它运行良好,但是当计时器第二次调用它时,它会在“elemento.InnerText = sometext”行中抛出 InvalidOperationException 为什么会这样,我该如何解决?
【问题讨论】:
-
异常的
Message是什么? -
抱歉,它是西班牙语,上面写着“El subproceso que realiza la llamada no puede obtener acceso a este objeto porque el propietario es otro subproceso。”这将类似于“进行调用的子进程无法访问此对象,因为它属于另一个子进程”。
-
sigh....Net 中最不幸的设计决策之一:本地化异常消息 :-(。如果有另一种方法来唯一地识别异常,那就不会那么糟糕了,但是没有't。
-
进行一些调试我意识到将字符串“something”的值分配给 elemento.InnerText 正在工作,所以问题应该是 vb 在内部做的事情......
-
翻译好像是“调用线程无法访问这个对象,因为不同的线程拥有它”
标签: wpf xml vb.net timer backgroundworker