我正在使用WPF(c#)应用程序,需要在某些过程中使用线程。但“InvokeRequired”不起作用。 我看这个answer但我无法工作。
这是我的代码:
private void CambiarProgreso(string texto, int valor)
{
if (this.InvokeRequired) //preguntamos si la llamada se hace desde un hilo
{
//si es así entonces volvemos a llamar a CambiarProgreso pero esta vez a través del delegado
//instanciamos el delegado indicandole el método que va a ejecutar
CambiarProgresoDelegado delegado = new CambiarProgresoDelegado(CambiarProgreso);
//ya que el delegado invocará a CambiarProgreso debemos indicarle los parámetros
object[] parametros = new object[] { texto, valor };
//invocamos el método a través del mismo contexto del formulario (this) y enviamos los parámetros
this.Invoke(delegado, parametros);
}
else
{
//en caso contrario, se realiza el llamado a los controles
lblProgreso.Content = texto;
PrbProgreso.Value = valor;
}
}
delegate void CambiarProgresoDelegado(string texto, int valor);
非常感谢!
答案 0 :(得分:1)
这解决了我的问题。 感谢。
private void CambiarProgreso(string texto, int valor)
{
if (!this.Dispatcher.CheckAccess()) //preguntamos si la llamada se hace desde un hilo
{
//si es así entonces volvemos a llamar a CambiarProgreso pero esta vez a través del delegado
//instanciamos el delegado indicandole el método que va a ejecutar
//CambiarProgresoDelegado delegado = new CambiarProgresoDelegado(CambiarProgreso);
//ya que el delegado invocará a CambiarProgreso debemos indicarle los parámetros
object[] parametros = new object[] { texto, valor };
//invocamos el método a través del mismo contexto del formulario (this) y enviamos los parámetros
this.Dispatcher.Invoke(new CambiarProgresoDelegado(CambiarProgreso), parametros);
}
else
{
//en caso contrario, se realiza el llamado a los controles
lblProgreso.Content = texto;
PrbProgreso.Value = valor;
}
}