Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
启动新线程时.NET WPF MissingMethodException_.net_Wpf_Multithreading_Exception - Fatal编程技术网

启动新线程时.NET WPF MissingMethodException

启动新线程时.NET WPF MissingMethodException,.net,wpf,multithreading,exception,.net,Wpf,Multithreading,Exception,我有一个WPF应用程序,其表单在启动时在新线程中调用自定义方法 Private Sub TestStep1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded Dim oThread As New Thread(AddressOf DisplayNextPicture) oThread.Start() End Sub Private Sub Dis

我有一个WPF应用程序,其表单在启动时在新线程中调用自定义方法

Private Sub TestStep1_Loaded(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles Me.Loaded
    Dim oThread As New Thread(AddressOf DisplayNextPicture)
    oThread.Start()
End Sub

Private Sub DisplayNextPicture()
    '' do stuff
End Sub
这在我的机器上运行良好,但在客户机上启动新线程会导致MissingMethodException。我不确定为什么会发生这种情况(不幸的是,客户端位于远程位置,因此我必须通过插入跟踪语句和反复试验来调试)。正如我通过跟踪确定的那样,找不到的肯定是DisplayNextPicture()方法

我唯一能想到的是,这与框架级别的安全性有关。从WPF应用程序启动新线程是否有限制


我无法通过Application.DispatcherUnhandleException捕获此异常,因此无法获取任何异常详细信息或堆栈跟踪。客户端将获得一个包含以下信息的.NET运行时异常对话框,这是我知道异常类型的唯一方法:

事件类型:clr20r3 P1:testapp.exe P2:1.0.0.0 P3:49fa2234 P4:mscorlib P5:2.0.0.0 P6:471ebc5b P7:1295 P8:14
P9:system.missingmethodexception


请帮助:)

MissingMethodException是由JITer(即时编译器)引发的。抖动将代码编译成汇编语言,一次编译一个方法。委托方法(DisplayNextPicture)中有一个方法正在调用一个在目标机器上的库中不存在的方法,我猜它正在运行一个旧版本的.net。因为抖动找不到方法,它爆炸了

在安装了VS2008和3.5 SP1的计算机上构建时,我已经遇到过几次这种情况,然后尝试在只安装了3.0的计算机上运行。有时,Microsoft会向库中添加一个方法,而不会升级其主要或次要版本。这通常是在一个.net framework service Pack中完成的

检查委托方法中的代码,查看任何可疑方法的MSDN,并仔细检查“版本信息”,查看方法支持哪些框架版本


如果可能的话,您也可以让客户端升级到最新的框架。

我也遇到了同样的问题。我正在调用Dispatcher.Invoke方法的重载,该方法在.Net的执行版本中不存在。我在MSDN上找到了一条有用的评论,关于帮助我解决问题的方法,尽管我的问题略有不同


如果您使用的是Invoke方法,请尝试使用第一个参数为DispatcherPriority的重载。

我使用的是VS2008、.Net 3.5,在启动服务线程时遇到类似问题。 升级到.NET3.5SP1修复了该问题。
谢谢你们的帮助。

FWIW,我遇到了一个P9 system.missingmethodexception错误,该错误使一些机器上的简单应用程序崩溃,但在其他机器上没有。我追踪到了在线程内部执行的“.WaitOne(2000)”行。从未在我的机器上造成问题,但它肯定会在其他机器上崩溃,即使代码从未执行过!线还没到那条线。程序启动时发生了崩溃,这真是令人沮丧。我甚至对问题代码行进行了“try..catch”,但没有任何帮助。我停止使用AutoResetEvent,在(!signaled){Thread.sleep(20);}时使用了一个变量和一个“
,这是一个难题,但它奏效了….

我在Windows XP SP3上测试我的应用程序时遇到了System.MissingMethodException,目标是.NET 3.5。我最终安装了Visual Studio 2008 Express,尝试从一开始就编译该应用程序。直到那时,编译器给了我相关错误,结果发现该方法仅在AutoResetEvent中使用WaitOne有一个带有2个参数的签名,因此我必须重写:

reset.WaitOne(1000);

reset.WaitOne(1000,true);


我猜Microsoft忘记将第一个重载添加到Windows XP.NET 3.5版本中。因为它在Windows 7中工作并且存在。想想看。

在尝试运行Windows服务(我已经编写)时遇到了这个问题。该服务可以在我的测试环境中正常运行,但不能在其他计算机上运行

问题是,当我的开发机器运行在3.5 Service Pack 1上时,这台麻烦的机器运行的是Framework版本3.5。将机器升级到SP1解决了这个问题


希望这能减轻一些人的痛苦。

是否有可能发布异常和堆栈?我无法捕获此异常。我通过应用程序捕获所有异常。DispatcherUnandledException事件,但由于其性质,我认为此事件以某种方式漏掉了。我知道它是MissingMethodException的唯一原因是r获取一个信息有限的.NET运行时异常对话框,但它提到此异常:EventType:clr20r3 P1:testapp.exe P2:1.0.0 P3:49fa2234 P4:mscorlib P5:2.0.0 P6:471ebc5b P7:1295 P8:14 P9:system.missingmethodexceptionThank you。这非常有助于确定exa我遇到的ct问题。这篇文章解释了这个问题以及如何最好地解决它。谢谢,SP1听起来像是解决方案!