1

我有一个线程,我需要像这样调用一个 void :

makegraph(toplot, ite, mm_0)

但是,如果我想同步,我应该使用 SynchronizationContext 并执行以下操作:

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

但我有以下错误:方法名称预期。我知道我应该使用委托,但我不熟悉语法。

你能帮我吗?

4

1 回答 1

2

首先,您的mContext变量永远不会设置为 的实例SynchronizationContext,它被初始化为 null。

SynchronizationContext.Post()函数需要两个参数,一个是SendOrPostCallback类型,一个是 object 类型。

  • 如果您查看 SendOrPostCallback 的文档,它是一个返回 void 并期望单个对象参数作为输入的委托。
  • Post 函数的object state参数是将传递给第一个参数中指定的委托的参数。

这意味着,您将需要创建一个makegraph与 SendOrPostCallback 委托的签名匹配的新函数,然后将所有参数传入单个对象中,如下所示:

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 文章委托(C# 编程指南)

于 2012-06-11T15:44:33.117 回答