1

私はスレッドを持っています、私はこのようなボイドを呼び出す必要があります:

makegraph(toplot, ite, mm_0)

ただし、同期したい場合は、SynchronizationContextを使用して次のことを行う必要があります。

SynchronizationContext mContext = null;
mContext.Post(new SendOrPostCallback(makegraph(toplot, ite, mm_0)),null);

しかし、followinfエラーがあります:メソッド名が必要です。デリゲートを使用する必要があることは知っていますが、構文に精通していません。

それについて私を助けてくれませんか?

4

1 に答える 1

2

まず、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) を参照してください。

于 2012-06-11T15:44:33.117 に答える