ThreadStart.BeginInvoke在Compact框架上抛出NotSupportedException

时间:2009-06-30 10:27:17

标签: c# .net multithreading compact-framework

我正在使用紧凑框架项目上的线程,并且代码类似于下面的代码。当我尝试进入StartThreads()时,抛出NotSupportedException。这看起来有点奇怪,为什么在调用StartThreads()而不是内部的行上抛出异常,CF上不支持它是什么?我认为它的ThreadStart.BeginInvoke,但这不是实际抛出异常的地方。

void SomeMethod()
{
  this.StartThreads(); // <- NotSupportedException is thrown here, I can't step into this method with the debugger
}

void StartThreads()
{
  ThreadStart threadStart = BeginDoStuff;
  threadStart.BeginInvoke(EndDoStuff, null);
}

2 个答案:

答案 0 :(得分:2)

CF 不支持BeginInvoke机制,以及ThreadPool

您没有看到Exception的原因是由于实现方式。我不完全确定细节,但BeginInvoke不是一个普通的方法(Delegate类),而是在运行时注入的东西(只是猜测最后一部分)。

当JIT编译器开始使用StartThreads方法时会发生错误。

答案 1 :(得分:1)

CF不支持delegate.BeginInvoke。

但是支持ThreadPool。您可以使用线程池来实现基本相同的行为。

void SomeMethod()
{
   this.StartThreads();
}

void StartThreads()
{
    System.Threading.ThreadPool.QueueUserWorkItem(DoStuff);
}

如果您希望它在完成后调用回调我建议您阅读Asynchronous Programming Model