使用同步上下文时的方法名称预期错误

本文关键字:错误 方法 同步 上下文 | 更新日期: 2023-09-27 18:36:53

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

makegraph(toplot, ite, mm_0)

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

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

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

你能帮我吗?

使用同步上下文时的方法名称预期错误

首先

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

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

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

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

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# 编程指南).