STW*_*STW 0 .net exception missingmethodexception
这个问题令我感到困惑,它影响了单个用户(据我所知)并且没有被我们复制......
用户正在接收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);
}
}
Run Code Online (Sandbox Code Playgroud)
这听起来像是在使用一种方法,它是在.NET Framework 2.0的SP中发布的.
我有同样的问题,因为我所使用的方法的WaitOne(INT)的ManualResetEvent的.我不得不用WaitOne(int,bool)替换它.
在.NET Framework SP 2中添加了WaitOne(int)方法,该方法在安装.NET Framework 3.5 SP1时应用.
在这种情况下,我建议阅读MSDN."版本信息"告诉您支持哪种框架或Service Pack特定方法.
归档时间: |
|
查看次数: |
971 次 |
最近记录: |