使用同步上下文时的方法名称预期错误
本文关键字:错误 方法 同步 上下文 | 更新日期: 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# 编程指南).