私は作成したクラスを持っていますが、クラスではマルチスレッドを行います。通常、私のマルチスレッドをフォーム上で行うには、以下のメソッドを使用します。InvokeRequiredプロパティとInvokeメソッドを使用してスレッドセーフな関数でクラスを作成する
//Thread Safe Functions
delegate void Thread_Safe_SendMessage_Progress_Callback(string sProgress);
private void Thread_Safe_SendMessage_Progress(string sProgress)
{
if (this.InvokeRequired)
{
Thread_Safe_SendMessage_Progress_Callback d =
new Thread_Safe_SendMessage_Progress_Callback(Thread_Safe_SendMessage_Progress);
try
{
this.Invoke(d, new object[] { sProgress });
}
catch
{
//ObjectDisposedException
}
}
else
{
//Fire up the thread event
SendMessageThread_Progress(sProgress);
}
}
これで完璧です!この時点で、私はマルチスレッドを私が作ったクラスに持っていこうとします。私は、InvokeRequiredプロパティを除いてすべてが素晴らしいと思われ、Invokeメソッドはクラス内に存在しません。だから、使用してthis.InvokeRequiredは、私はこれを行うプロパティ今
private bool InvokeRequired
{
get
{
//Get the current thread id
int iThreadID = System.Threading.Thread.CurrentThread.ManagedThreadId;
//Compare and return results
return (iThreadID != m_iThreadID);
}
}
を...(スレッドがで始めるために作成されたときにm_iThreadIDは、コンストラクタで設定されていることに注意してください)というのが私のクラスを与えるために...エラーがスローされます残っているのはInvokeメソッドだけです。これをどのように動作させるには?
http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/09b7285d-3294-483c-ad92-36d202285d43 –