首先,您的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# 编程指南)
。