hola a todos.
Javier, quería preguntarte otra cosa con respecto a lo siguiente:
resulta que tengo que refrescar una pantalla window en donde pinto
dinámicamente
una especie de habitaciones con unos cuadritos, y les cambio el color (no lo
he implementado aún)
dependiendo del estado en que se encuentre (el estado es refrescado desde
otro lugar en otro pc, contra la base de datos).
En fin, el caso es que tengo una pantalla hecha en WPF, donde dibujo algunas
habitaciones y después de ésto trato de hacer el refresh asincrónicamente
(lo ví en un ejemplo en internet), pero la pantalla se está freezando.
Creo que estoy cerrando bien la conexión y liberando recursos.
En pocas palabras en esta aplicación solo se verá el estado de la
habitación, no se permitirá el ingreso de información.
Acá posteo el código para que depronto si saben depronto que estoy haciendo
mal.
De antemano te lo agradezco.
Perdonen por la identación, pero se pierde al pegarlo en el body del
mensaje.
using System;
using System.Configuration;
using System.Data;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Shapes;
using System.Windows.Threading;
using System.Threading;
using MySql.Data.MySqlClient;
namespace AdmnistracionHabitaciones
{
/// <summary>
/// Interaction logic for Habitaciones.xaml
/// </summary>
public partial class Habitaciones : Window
{
public delegate void UpdateScreen();
DataSet dsDatos = new DataSet();
public Habitaciones() : base()
{
InitializeComponent();
InicioRefresh();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
}
private void InicioRefresh()
{
canvas.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
new UpdateScreen(MostrarHab));
}
#region MostrarHab
public void MostrarHab()
{
int iPiso = int.MinValue;
int iTop = int.MinValue;
int iLeft = int.MinValue;
bool bSemilla = false;
SolidColorBrush Brush = new SolidColorBrush(Colors.Cyan);
dsDatos = TraerDatos();
//Piso del primer registro, para iniciar la comparaci¢n
iPiso Convert.ToInt32(dsDatos.Tables[0].Rows[0]["intIdCama"].ToString().Substring(0,
1));
//Distancia del top y del left con respecto al Canvas, con q inician
iTop = 5;
iLeft = 5;
foreach (DataRow dr in dsDatos.Tables[0].Rows)
{
int idrPiso = Convert.ToInt32(dr["intIdCama"].ToString().Substring(0, 1));
if (bSemilla)
{
if (iPiso.Equals(idrPiso))
{
iLeft += 45;
}
else
{
iLeft = 5;
iTop += 45;
iPiso = idrPiso;
}
}
bSemilla = true;
Button btn = new Button();
btn.Name = "_" + dr["intIdCama"];
btn.Content = dr["intIdCama"].ToString() + dr["vcLetraCama"].ToString();
btn.Height = 42;
btn.Width = 43;
btn.IsEnabled = true;
btn.FontSize = 11;
btn.Background = Brushes.Aqua; //Brush;
btn.BorderBrush = Brushes.Black;
Canvas.SetLeft(btn, iLeft);
Canvas.SetTop(btn, iTop);
canvas.Children.Add(btn);
canvas.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.SystemIdle,
new UpdateScreen(this.MostrarHab));
//Thread.Sleep(4000);
}
}
#endregion
#region TraerDatos
private DataSet TraerDatos()
{
DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter();
MySqlConnection cnx = new
MySqlConnection(ConfigurationSettings.AppSettings["MySql"]);
da.SelectCommand = new MySqlCommand("SELECT camanovedad.intIdCama,
camas.vcletracama " +
" FROM camas INNER JOIN camanovedad ON " +
" (camas.intIdCama=camanovedad.intIdCama) " +
" ORDER BY camanovedad.intIdCama", cnx);
cnx.Open();
DataSet dsHab = new DataSet();
da.Fill(dsHab);
return dsHab;
if (da != null) da.Dispose();
cnx.Close();
}
#endregion
}
}
Leer las respuestas