まず、mContext
変数が のインスタンスに設定されることはなくSynchronizationContext
、null に初期化されます。
関数SynchronizationContext.Post()は、 SendOrPostCallback型と object型の 2 つの引数を必要とします。
- SendOrPostCallback のドキュメントを見ると、これは void を返し、単一のオブジェクト パラメーターを入力として期待するデリゲートです。
- Post 関数の
object state
パラメーターは、最初のパラメーターで指定されたデリゲートに渡されるパラメーターです。
つまりmakegraph
、SendOrPostCallback デリゲートの署名に一致する新しい関数を作成し、次のようにすべてのパラメーターを 1 つのオブジェクトに渡す必要があります。
public class MakeGraphState()
{
// These don't have to be objects, but I don't know
// what types your toplot, ite, and mm_0 paramters are
public object toplot { get; set; }
public object ite { get; set; }
public object mm_0 { get; set; }
}
public static void makegraph(object state)
{
// Convert state to a MakeGraphState so we can get
// all of the input paramters
MakeGraphState myState = (MakeGraphState)object;
makegraph(myState.toplot, myState.ite, myState.mm_0);
}
次に、このコードを次のように使用できます。
SynchronizationContext mContext = new SynchronizationContext();
// TODO: Initialize your SynchronizationContext
MakeGraphState state = new MakeGraphState(toplot, ite, mm_0);
mContext.Post(new SendOrPostCallback(makegraph), state);
さらに、デリゲートのメソッド名をショートカットとして渡すこともできます。
SynchronizationContext mContext = null;
// TODO: Initialize your SynchronizationContext
MakeGraphState state = new MakeGraphState(toplot, ite, mm_0);
mContext.Post(makegraph, state);
デリゲートの詳細については、MSDN の記事Delegates (C# Programming Guide)
を参照してください。