[英]Passing the variable through delegate with ref parameter
有这样的代表:
public delegate void GraphInit(ref DataMedia media);
public delegate void GraphStop(ref DataMedia media);
我想用这样的东西:
void VideoRenderProcess(object sender, VideoRenderingArgs r_args)
{
DataMedia obj_mdata = sender as DataMedia;
switch (obj_mdata.state)
{
case GraphState.Running:
this.Dispatcher.Invoke(new GraphStop(ref obj_mdata));
break;
......
}
}
VideoRenderingArgs
是自行设计的类:
public class VideoRenderingArgs
{
public string uri { get; set; }
}
// it's just one string, of course I'm planning to add many other details
// which relate to video, but it's other story
GraphStop()
方法是:
void GraphStop(ref DataMedia media)
{
if (media.mre_demux_conf != null) media.mre_demux_conf.WaitOne(2000);
lock (this)
{
if (media.i_main_control != null)
{
media.i_main_control.Stop();
media.state = GraphState.Stopped;
}
}
GraphClean();
}
我收到错误消息:
'obj_mdata'是一个'variable',但与'method'一起使用,既使用
ref
又未使用。
如何在C#中做我想做的事情?
不要使用new创建委托。 只需将所需的方法分配给委托变量。
如果您尝试这样做,会发生什么:
this.Dispatcher.Invoke(() => GraphStop(ref obj_mdata))
另外,如果您的委托人与相同作用域中的方法同名,您将遇到麻烦!
[不幸的是,以上内容仅适用于.Net 4.5或更高版本。
找到了解决方案:
public delegate void DGraphInit(ref DataMedia media);
...
if (obj_mdata.state == GraphState.Running)
{
object[] data = { obj_mdata };
DGraphInit delegate2call = new DGraphInit(GraphInit);
this.Dispatcher.Invoke(delegate2call, data);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.