Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: Hartigan en 9 Septiembre 2010, 04:47 am



Título: Error programando las tareas (C#)
Publicado por: Hartigan 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.


Título: Re: Error programando las tareas (C#)
Publicado por: Hartigan en 9 Septiembre 2010, 20:32 pm
Bueno me respondo diciendo que ya me ha funcionado. ya programo tareas en mi agenda. xDD ;-)


Título: Re: Error programando las tareas (C#)
Publicado por: [D4N93R] en 9 Septiembre 2010, 20:59 pm
Yo estaba por responderte xD Pero bueno, postea tu solución a ver que tal.


Título: Re: Error programando las tareas (C#)
Publicado por: Hartigan 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 ;)


Título: Re: Error programando las tareas (C#)
Publicado por: Hartigan 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.


Título: Re: Error programando las tareas (C#)
Publicado por: [D4N93R] 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!


Título: Re: Error programando las tareas (C#)
Publicado por: Hartigan 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...


Título: Re: Error programando las tareas (C#)
Publicado por: [D4N93R] en 9 Septiembre 2010, 23:52 pm
Revisa si es flag esa propiedad.. si es así puedes hacerlo , sino, hay algo mal.


Título: Re: Error programando las tareas (C#)
Publicado por: Hartigan 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....


Título: Re: Error programando las tareas (C#)
Publicado por: [D4N93R] 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!


Título: Re: Error programando las tareas (C#)
Publicado por: Hartigan en 10 Septiembre 2010, 03:50 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!

gracias pero no lo entiendo muy bien.

a la propiedad yo tengo que pasarle los valores de la sigueinte manera:

triggers.MonthsOfYear = 1 | 8 | 32  (el numero depende del mes que sea)

entonces no se si funcionará eso que me has puesto, de todos mods ahora lo pruebo...