2009-06-30 6 views
2

私はコンパクトなフレームワークプロジェクトのスレッドで作業しており、以下のようなコードを持っています。 StartThreads()にステップインしようとすると、NotSupportedExceptionがスローされます。これはちょっとひどいようですが、なぜStartThreads()を呼び出す行に例外がスローされ、内部ではなく、CFでサポートされていないのは何ですか?私はそのThreadStart.BeginInvokeだと思うが、例外が実際にスローされている場所ではない。ThreadStart.BeginInvokeはコンパクトフレームワークでNotSupportedExceptionをスローします

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

BeginInvokeメソッド機構はThreadPoolのとともに、CF ではサポートされていません。

例外が表示されない理由は、これが実装されているためです。私は詳細については完全にはわかりませんが、BeginInvokeは(Delegateクラスの)通常のメソッドではなく、実行時に注入されるものです(最後の部分を推測するだけです)。

JITコンパイラがStartThreadsメソッドで動作するようになるとエラーが発生します。

+0

上に読むことをお勧め[OK]をおかげで、私の次の質問http://stackoverflow.com/questions/1063189/asynccallbackに私をリード-for-a-thread-on-compact-framework – Charlie

+1

スレッドプールがサポートされており、CFアプリケーションで広く使用されています – trampster

+0

Daniel、そうです。 –

1

delegate.BeginInvokeはCFではサポートされていません。

ただし、ThreadPoolがサポートされています。基本的に同じ動作を達成するためにスレッドプールを使用することができます。

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

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

あなたはそれがコールバックを呼び出したい場合は終了したときに、私はあなたがAsynchronous Programming Model

関連する問題