2009-04-30 15 views
6

私は、起動時に新しいスレッドでカスタムメソッドを呼び出すフォームを持つWPFアプリケーションを持っています。.NET WPF MissingMethodExceptionが新しいスレッドを起動するとき

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.DispatcherUnhandledException経由でこの例外をキャッチすることができないので、例外の詳細やスタックトレースを取得できません。クライアントは、以下の情報を.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

が:)

+0

例外とスタックをポストする可能性はありますか? –

+0

私はこの例外をキャッチできません。私はApplication.DispatcherUnhandledExceptionイベントを介してすべての例外をキャッチしますが、これは何とかスリップします。その性質上、私は仮定しています。私がそれがMissingMethodExceptionだと知っている唯一の理由は、ユーザが制限付き情報で.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 – Keith

答えて

2

(私が書いた)Windowsサービスを実行しようとしたときにちょうどこの問題が発生しました。このサービスはテスト環境で正常に動作しますが、別のマシンでは正常に動作しません。

問題は、開発マシンが3.5 Service Pack 1になっている間に、厄介なマシンがFramework 3.5を実行していたことが判明しました。

これは誰かの痛みを少し緩和したいと考えています。

+0

ありがとうございます、SP1はソリューションのように聞こえます! – Keith

1

MissingMethodExceptionがJITerによってスローされます助けてください(ジャストインタイムコンパイラで) 。ジッタは、コードをアセンブリ言語に一度に1つずつコンパイルします。デリゲートメソッド(DisplayNextPicture)の中にターゲットマシンのライブラリに存在しないメソッドを呼び出す方法がいくつかあります。これは古いバージョンの.netを実行していると思います。ジッタは方法を見つけることができないので、それは爆発する。

VS 2008と3.5 SP1がインストールされているコンピュータでビルドした後、3.0しかインストールされていないコンピュータで実行しようとすると、これまで数回実行されました。マイクロソフトでは、ライブラリにメソッドを追加し、メジャーバージョンまたはマイナーバージョンをアップグレードしないことがあります。多くの場合、これは.netフレームワークサービスパックの1つで行われます。

デリゲートメソッドでコードを実行し、不審なメソッドについてMSDNを確認し、メソッドにサポートされているフレームワークのバージョンを確認するために「バージョン情報」を再度確認してください。

可能であれば、最新のフレームワークにアップグレードすることもできます。

1

私はこの同じ問題を抱えていました。私は実行中のバージョンの.Netに存在しなかったDispatcher.Invokeメソッドのオーバーロードを呼び出していました。私は、私の問題が少し異なりましたが、私を助けてくれた方法についてMSDNで役に立つコメントを見つけました。

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcher.invoke.aspx

あなたはInvokeメソッドを使用している場合、それは最初の引数だとしたDispatcherPriorityを持つオーバーロードを使用してみてください。

3

私はVS2008、.Net 3.5を使用していましたが、同様の問題がサービスのスレッドを開始していました。 .Net 3.5 SP1にアップグレードすると問題が解決しました。 助けていただきありがとうございます。

2

FWIW、私はP9システムを持っていました。いくつかのマシンで単純なアプリケーションをクラッシュさせたが、他のマシンでクラッシュさせていたmissingmethodexceptionエラー。スレッド内で実行していた ".WaitOne(2000)"の行まで追跡しました。私のマシンでは決して問題を引き起こすことはありませんが、他のマシンではクラッシュしてしまいます。コードが決して実行されなかったのですが!スレッドはその行にさえ達していませんでした。プログラムが起動したときにクラッシュが発生していて、本当にイライラしていました。私はコードの問題の行の周りに "試してみる"ことがあったし、それは助けにはならなかった。私はAutoResetEventの使用を中止し、変数と "kludge"だったwhile(! signaled) { Thread.sleep(20); }を使用しましたが、それは正常に機能しました。

+0

ありがとうございます。これは非常に役に立ち、正確な問題点を特定するのに役立ちました。ここでは、問題を説明した記事とその問題を解決する方法を説明します。 http://blog.darrenstokes.com/2009/03/30/watch-out-for-those-waitone-overloads-when-you-need-backwards-compatibility/ –

3

Windows XP SP3で.NET 3.5をターゲットにしてアプリケーションをテストするとSystem.MissingMethodExceptionが発生しました私はVisual Studio 2008 Expressをインストールして、最初からアプリケーションをコンパイルしようとしていましたが、コンパイラが関連エラーを出したので、AutoResetEventのWaitOneメソッドは2つのパラメータを持つシグネチャしか持たなかったので、 :

reset.WaitOne(1000);

MicrosoftはWindows XP .NET 3.5リリースに最初のオーバーロードを追加するのを忘れたと思います。 Windows 7で動作し、存在するため、図に進みます。

関連する問題