Autor
|
Tema: Error programando las tareas (C#) (Leído 7,532 veces)
|
Hartigan
Desconectado
Mensajes: 310
|
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: TaskSchedulerClass scheduler = new TaskSchedulerClass (); scheduler.Connect(null, null, null, null); ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Author = autor; task.RegistrationInfo.Description = descripcion; ITaskSettings settings = task.Settings; settings.Enabled = true; settings.Hidden = false; switch(recurrencia) { case "horaria": ITimeTrigger trigger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); trigger.Enabled = true; trigger.Id = nombre; trigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() + "T" + hora; if(fechaFin != string.Empty) { trigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3,2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() + "T" + horaFin; } break; case "diaria": IDailyTrigger dailyTrigger = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY); dailyTrigger.Enabled = true; dailyTrigger.Id = nombre; dailyTrigger.DaysInterval = Convert.ToInt16(textBoxDia.Text.ToString()); IRepetitionPattern rp = (IRepetitionPattern)dailyTrigger.Repetition; /* if (checkBoxRepetir.Checked == true) { rp.Duration = TimeSpan.FromMinutes(int.Parse(this.textBoxDuracion.Text.ToString()); rp.Interval = TimeSpan.FromMinutes(60); }*/ dailyTrigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() + "T" + hora; if (fechaFin != string.Empty) { dailyTrigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3, 2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() + "T" + horaFin; } break; } IShowMessageAction mensaje = (IShowMessageAction)task.Actions.Create(_TASK_ACTION_TYPE.TASK_ACTION_SHOW_MESSAGE); mensaje.Id = "My mensaje"; mensaje.Title = titulo; mensaje.MessageBody = mensaje.ToString(); ITaskFolder root = scheduler.GetFolder("\\"); IRegisteredTask regTask = root.RegisterTaskDefinition(nombre, task, (int)_TASK_CREATION.TASK_CREATE_OR_UPDATE, null, null, _TASK_LOGON_TYPE.TASK_LOGON_NONE, ""); ... ....
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
Mensajes: 310
|
Bueno me respondo diciendo que ya me ha funcionado. ya programo tareas en mi agenda. xDD
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Yo estaba por responderte xD Pero bueno, postea tu solución a ver que tal.
|
|
|
En línea
|
|
|
|
Hartigan
Desconectado
Mensajes: 310
|
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í: .... TaskSchedulerClass scheduler = new TaskSchedulerClass (); scheduler.Connect(null, null, null, null); ITaskDefinition task = scheduler.NewTask(0); task.RegistrationInfo.Author = autor; task.RegistrationInfo.Description = descripcion; ITaskSettings settings = task.Settings; settings.Enabled = true; settings.Hidden = false; try { switch (recurrencia) { case "horaria": ITimeTrigger timeTrigger = (ITimeTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_TIME); timeTrigger.Enabled = true; timeTrigger.Id = nombre; timeTrigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() + "T" + hora; if (fechaFin != string.Empty) { timeTrigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3, 2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() + "T" + horaFin; } if (checkBoxRepetir .Checked == true) { if (duracion != string.Empty) timeTrigger.Repetition.Duration = duracion; timeTrigger.Repetition.Interval = "PT" + repeticion.ToString() + "M"; } break; case "diaria": IDailyTrigger dailyTrigger = (IDailyTrigger)task.Triggers.Create(_TASK_TRIGGER_TYPE2.TASK_TRIGGER_DAILY); dailyTrigger.Enabled = true; dailyTrigger.Id = nombre; dailyTrigger.StartBoundary = fecha.Substring(6, 4).ToString() + "-" + fecha.Substring(3, 2).ToString() + "-" + fecha.Substring(0, 2).ToString() + "T" + hora; if (fechaFin != string.Empty) { dailyTrigger.EndBoundary = fechaFin.Substring(6, 4).ToString() + "-" + fechaFin.Substring(3, 2).ToString() + "-" + fechaFin.Substring(0, 2).ToString() + "T" + horaFin; } dailyTrigger.DaysInterval = Convert.ToInt16(textBoxDia.Text.ToString()); if (checkBoxRepetir .Checked == true) { if (duracion != string.Empty) dailyTrigger.Repetition.Duration = duracion; dailyTrigger.Repetition.Interval = "PT" + repeticion.ToString() + "M"; } break; ..... ...
Espero que le sirva a alguien. Salu2
|
|
|
En línea
|
|
|
|
Hartigan
Desconectado
Mensajes: 310
|
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
Mensajes: 1.646
My software never has bugs. Its just features!
|
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
Mensajes: 310
|
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
Mensajes: 1.646
My software never has bugs. Its just features!
|
Revisa si es flag esa propiedad.. si es así puedes hacerlo , sino, hay algo mal.
|
|
|
En línea
|
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Bueno puedes hacer un enum con los valores Hexadecimales y luego hacer bitwise. De esa forma puedes pasar los meses que quieras. Por ejemplo short january =0X01 ;// binario es 0000000001 short october =0X200 ;// binario es 1000000000 long result=january & october ; //binario es 1000000001
Fíjate que es & y no && que es diferente. Un saludo!
|
|
|
En línea
|
|
|
|
|
|