elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Error programando las tareas (C#)
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Error programando las tareas (C#)  (Leído 7,532 veces)
Hartigan


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Error programando las tareas (C#)
« en: 9 Septiembre 2010, 04:47 am »

HOla compis bueno pues os comento que al final he decidido programar yo mismo las tareas de mi agenda usando las clases del programador de tareas de windows. Entonces he conseguido ya programar algunas tareas pero no consigo establecer algunos parametros referentes al IRepetitionPattern y son el Duration y el INterval.

mi código:

Código
  1. TaskSchedulerClass scheduler = new TaskSchedulerClass();
  2.            scheduler.Connect(null, null, null, null);
  3.  
  4.            ITaskDefinition task = scheduler.NewTask(0);
  5.  
  6.            task.RegistrationInfo.Author = autor;
  7.            task.RegistrationInfo.Description = descripcion;
  8.  
  9.            ITaskSettings settings = task.Settings;
  10.            settings.Enabled = true;
  11.            settings.Hidden = false;
  12.  
  13.           switch(recurrencia)
  14.            {
  15.                case "horaria":
  16.  
  17.                   ITimeTrigger trigger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
  18.                   trigger.Enabled = true;
  19.                   trigger.Id = nombre;
  20.  
  21.                   trigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() +
  22.                       "T" + hora;
  23.                   if(fechaFin != string.Empty)
  24.                   {
  25.                       trigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3,2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() +
  26.                           "T" + horaFin;
  27.                   }
  28.                   break;
  29.  
  30.               case "diaria":
  31.                   IDailyTrigger dailyTrigger = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
  32.                   dailyTrigger.Enabled = true;
  33.                   dailyTrigger.Id = nombre;
  34.                   dailyTrigger.DaysInterval = Convert.ToInt16(textBoxDia.Text.ToString());
  35.                   IRepetitionPattern rp = (IRepetitionPattern)dailyTrigger.Repetition;
  36.                 /*  if (checkBoxRepetir.Checked == true)
  37.                    {
  38.                        rp.Duration = TimeSpan.FromMinutes(int.Parse(this.textBoxDuracion.Text.ToString());
  39.                        rp.Interval = TimeSpan.FromMinutes(60);
  40.                        
  41.                    }*/
  42.                   dailyTrigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() +
  43.                       "T" + hora;
  44.                   if (fechaFin != string.Empty)
  45.                   {
  46.                       dailyTrigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3, 2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() +
  47.                           "T" + horaFin;
  48.                   }
  49.  
  50.                   break;
  51.            }
  52.  
  53.  
  54.            IShowMessageAction mensaje = (IShowMessageAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_SHOW_MESSAGE);
  55.            mensaje.Id = "My mensaje";
  56.            mensaje.Title = titulo;
  57.            mensaje.MessageBody = mensaje.ToString();
  58.  
  59.            ITaskFolder root = scheduler.GetFolder("\\");
  60.            IRegisteredTask regTask = root.RegisterTaskDefinition(nombre, task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, "");
  61.          ...
  62. ....


Lo que está comentado es lo que no consigo hacer funcionar he visto algunos ejemplos y debería estar bien pero a mi no me funcoina porque me dice que no se puede convertir el tipo string en TimeSpan. Como podria hacerlo???

Salu2.


« Última modificación: 9 Septiembre 2010, 04:58 am por [D4N93R] » En línea

Hartigan


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Error programando las tareas (C#)
« Respuesta #1 en: 9 Septiembre 2010, 20:32 pm »

Bueno me respondo diciendo que ya me ha funcionado. ya programo tareas en mi agenda. xDD ;-)


En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Error programando las tareas (C#)
« Respuesta #2 en: 9 Septiembre 2010, 20:59 pm »

Yo estaba por responderte xD Pero bueno, postea tu solución a ver que tal.
En línea

Hartigan


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Error programando las tareas (C#)
« Respuesta #3 en: 9 Septiembre 2010, 21:50 pm »

jejeje, el problema estaba en que el valor de la duración tenia que ser mayor que la del intervalo de repetición por eso me daba error. Lo he dejado así:

Código
  1.  
  2. ....
  3.  
  4. TaskSchedulerClass scheduler = new TaskSchedulerClass();
  5.            scheduler.Connect(null, null, null, null);
  6.  
  7.            ITaskDefinition task = scheduler.NewTask(0);
  8.  
  9.            task.RegistrationInfo.Author = autor;
  10.            task.RegistrationInfo.Description = descripcion;
  11.  
  12.            ITaskSettings settings = task.Settings;
  13.            settings.Enabled = true;
  14.            settings.Hidden = false;
  15.  
  16.            try
  17.            {
  18.  
  19.                switch (recurrencia)
  20.                {
  21.                    case "horaria":
  22.  
  23.                        ITimeTrigger timeTrigger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME);
  24.                        timeTrigger.Enabled = true;
  25.                        timeTrigger.Id = nombre;
  26.  
  27.                        timeTrigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() +
  28.                            "T" + hora;
  29.                        if (fechaFin != string.Empty)
  30.                        {
  31.                            timeTrigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3, 2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() +
  32.                                "T" + horaFin;
  33.                        }
  34.  
  35.                        if (checkBoxRepetir.Checked == true)
  36.                        {
  37.                            if (duracion != string.Empty)
  38.                                timeTrigger.Repetition.Duration = duracion;
  39.                            timeTrigger.Repetition.Interval = "PT" + repeticion.ToString() + "M";
  40.                        }
  41.                        break;
  42.  
  43.                    case "diaria":
  44.  
  45.                        IDailyTrigger dailyTrigger = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY);
  46.                        dailyTrigger.Enabled = true;
  47.                        dailyTrigger.Id = nombre;
  48.                        dailyTrigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() +
  49.                            "T" + hora;
  50.                        if (fechaFin != string.Empty)
  51.                        {
  52.                            dailyTrigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3, 2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() +
  53.                                "T" + horaFin;
  54.                        }
  55.                        dailyTrigger.DaysInterval = Convert.ToInt16(textBoxDia.Text.ToString());
  56.  
  57.                        if (checkBoxRepetir.Checked == true)
  58.                        {
  59.                            if (duracion != string.Empty)
  60.                                dailyTrigger.Repetition.Duration = duracion;
  61.                            dailyTrigger.Repetition.Interval = "PT" + repeticion.ToString() + "M";
  62.                        }
  63.  
  64.                        break;
  65.  
  66. .....
  67. ...


Espero que le sirva a alguien.

Salu2 ;)
En línea

Hartigan


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Error programando las tareas (C#)
« Respuesta #4 en: 9 Septiembre 2010, 21:58 pm »

Tengo un nuevo problema y es el siguiente.

en un formulario tengo los 12 meses del año, cada uno es un checkBox.

Necesito pasar datos a una variable de la siguiente forma:


variable = 2|4|8

 Esos números son los meses del año marcados del formulario. Como podría hacerlo???

gracias de antemano.
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Error programando las tareas (C#)
« Respuesta #5 en: 9 Septiembre 2010, 22:07 pm »

Si es string tienes dos formas:

1.- Muchos if y verifica que cuando uno este checked le concatenas el valor al string..
2.- Esta es mejor, metes los checkboxes dentro de un panel o algo, y haces un foreach (control c in nombredelpanel.Controls) dentro del foreach verificas si c es de tipo CheckBox, esto lo haces así: if(c is CheckBox) si es afirmativo entonces verificas el checked y haces lo que tengas que hacer, en este caso concatenar el valor del checkbox.

El valor lo puedes tener guardado en una propiedad llamada tag que tienen todos los controles.

Saludos!
En línea

Hartigan


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Error programando las tareas (C#)
« Respuesta #6 en: 9 Septiembre 2010, 23:33 pm »

esque la variable no es un string, sno que es un short!!!!! ya había probado a concatenar todo mediante if's pero claro, al convertirla a short no me la reconoce bien...
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Error programando las tareas (C#)
« Respuesta #7 en: 9 Septiembre 2010, 23:52 pm »

Revisa si es flag esa propiedad.. si es así puedes hacerlo , sino, hay algo mal.
En línea

Hartigan


Desconectado Desconectado

Mensajes: 310


Ver Perfil
Re: Error programando las tareas (C#)
« Respuesta #8 en: 10 Septiembre 2010, 00:41 am »

la propiedad es trigger.MonthsOfYear

http://msdn.microsoft.com/en-us/library/aa382058%28v=VS.85%29.aspx

No se como pasarle los valores....
En línea

[D4N93R]
Wiki

Desconectado Desconectado

Mensajes: 1.646


My software never has bugs. Its just features!


Ver Perfil WWW
Re: Error programando las tareas (C#)
« Respuesta #9 en: 10 Septiembre 2010, 03:36 am »

Bueno puedes hacer un enum con los valores Hexadecimales y luego hacer bitwise. De esa forma puedes pasar los meses que quieras.

Por ejemplo

Código
  1. short january  =0X01    ;// binario es 0000000001
  2. short october =0X200   ;// binario es 1000000000
  3. long result=january  & october ; //binario es 1000000001

Fíjate que es & y no && que es diferente.

Un saludo!
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con crontab programando tareas de backup.
GNU/Linux
WIитX 2 2,018 Último mensaje 2 Marzo 2015, 20:22 pm
por WIитX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines