我正在使用紧凑框架项目上的线程,并且代码类似于下面的代码。当我尝试进入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);
}
答案 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