0

この問題は私を困惑させました.1人のユーザーに影響を与えており(私の知る限り)、再現されていません...

  • ユーザーが MissingMethodException を受け取っています。トレース ファイルは、コンポーネントの新しいインスタンスを作成した後、それを機能させる準備として Initialize/Setup メソッドを呼び出しているときに発生していることを示しています (例では InitializeWorkerByArgument)。

  • エラーによって指定されたメソッドは、基本クラスが実装するインターフェイス メソッドであり、基本クラスから派生したクラスは必要に応じてオーバーライドできます。

  • ユーザーはアプリケーションの最新リリースを持っています

  • 提供されるすべてのコードは、単一のアセンブリ内で出荷されます

コンポーネントの非常に単純化されたバージョンを次に示します。

class Widget : UserControl
{

    public void DoSomething(string argument)
    {
        InitializeWorkerByArgument(argument);
        this.Worker.DoWork();
    }

    private void InitializeWorkerByArgument(string argument)
    {
        switch (argument)
        {
            case "SomeArgument":
                this.Worker = new SomeWidgetWorker();
                break;
        }

        // The issue I'm tracking down would have occured during "new SomeWidgetWorker()"
        // and would have resulted in a missing method exception stating that
        // method "DoWork" could not be found.

        this.Worker.DoWorkComplete += new EventHandler(Worker_DoWorkComplete);
    }

    private IWidgetWorker Worker
    {
        get;
        set;
    }

    void Worker_DoWorkComplete(object sender, EventArgs e)
    {
        MessageBox.Show("All done");
    }
}

interface IWidgetWorker
{
    void DoWork();
    event EventHandler DoWorkComplete;
}

abstract class BaseWorker : IWidgetWorker
{
    virtual public void DoWork()
    {
        System.Threading.Thread.Sleep(1000);
        RaiseDoWorkComplete(this, null);
    }

    internal void RaiseDoWorkComplete(object sender, EventArgs e)
    {
        if (DoWorkComplete != null)
        {
            DoWorkComplete(this, null);
        }
    }

    public event EventHandler DoWorkComplete;
}

class SomeWidgetWorker : BaseWorker
{
    public override void DoWork()
    {
        System.Threading.Thread.Sleep(2000);
        RaiseDoWorkComplete(this, null);
    }
}
4

4 に答える 4

6

.NET Framework 2.0 の SP でリリースされたメソッドを使用しているようです。

ManualResetEvent のメソッドWaitOne (int)を使用したのと同じ問題がありました。WaitOne(int,bool)に置き換える必要がありました。

メソッドWaitOne(int)は .NET Framework SP 2 で追加されました。これは、.NET Framework 3.5 SP1 をインストールするときに適用されます。

そのような場合は、MSDN を読むことをお勧めします。「バージョン情報」は、特定のメソッドがどのフレームワークまたはサービス パックでサポートされているかを示します。

于 2009-07-08T11:54:20.913 に答える
1

問題のあるマシンの OS は、他のすべてのマシンと異なっていますか? 私は何年も前に同様のエラーをデバッグしましたが、.Net 型解決の領域で特定の種類の Windows での奇妙な動作を突き止めたと思います。

于 2009-07-08T15:36:45.263 に答える
1

これは .NET Framework の依存関係の問題であり、このユーザーが必要な .NET バージョンを持っていない可能性はありますか? ちょっとした考え。

于 2009-07-08T11:40:12.860 に答える
1

問題が発生する頻度が低いことを考えると、これは、そのユーザーのコンピュータのソフトウェア環境が壊れていることが原因である可能性が高いと思われます。

于 2009-07-08T11:41:25.977 に答える