Datagridview und System.Timers - Applikation haengt wenn vertical ScrollBar erscheint

25/11/2008 - 17:45 von Markus | Report spam
Hallo NG,

Ich bin etwas ratlos. Ich habe eine Applikation geschrieben (.NET 2.0
auf WinXP Pro SP2) welche via Timer Messwerte in eine Datatable die an
ein DGV gebunden ist schreibt (Beispiel Extrakt siehe bitte unten).
Wenn ich das Ganze im VS2008 laufen lasse funktioniert eigentlich
alles einwandfrei (debug sowie release). ABER, wenn ich die exe
builde, und die Applikation auf einem anderen Rechner laufen lasse,
dann haengt die Applikation sobald die vertical scroll bar angezeigt
werden muesste. Hat jemand schon aehnliche Erfahrungen gemacht?

Vielen Dank im Voraus fuer eure Hilfe

Gruss,
Markus

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Timers;

namespace VerticalScrollGridProblem
{
public partial class Form1 : Form
{
private DataTable DataTableGeneral;
private System.Timers.Timer stableTimer;

public Form1()
{
InitializeComponent();
DataTableGeneral = new DataTable();
SetupDataTable();

stableTimer = new System.Timers.Timer(1000);
stableTimer.Elapsed += new ElapsedEventHandler
(stableTimer_Elapsed);
stableTimer.Enabled = false;
}



private void AddStuff()
{
AddNewRow(DataTableGeneral, "test", 1, 2, 3);
//refresh grid

//if (!InvokeRequired)
//{
// dataGridGeneral.Refresh();
//}
//else
//{
// dataGridGeneral.Invoke(new EventHandler(delegate
// {
// dataGridGeneral.Refresh();
// }));
//}

}

private void button1_Click(object sender, EventArgs e)
{
stableTimer.Enabled = true;

}

private void SetupDataTable()
{
//table name
DataTableGeneral.TableName = "Data";

//define headers
DataTableGeneral.Columns.Add("ID");
DataTableGeneral.Columns.Add("X");
DataTableGeneral.Columns.Add("Y");
DataTableGeneral.Columns.Add("Z");
DataTableGeneral.Columns.Add("X2");
DataTableGeneral.Columns.Add("Y2");
DataTableGeneral.Columns.Add("Z2");
DataTableGeneral.Columns.Add("X3");
DataTableGeneral.Columns.Add("Y3");
DataTableGeneral.Columns.Add("Z3");
DataTableGeneral.Columns.Add("X4");
DataTableGeneral.Columns.Add("Y4");
DataTableGeneral.Columns.Add("Z4");
//bind
dataGridGeneral.DataSource = DataTableGeneral;
}


private void AddNewRow(DataTable dt, string ID, double measX,
double measY, double measZ)
{
DataRow dr = dt.NewRow();
dr[0] = ID;
dr[1] = measX;
dr[2] = measY;
dr[3] = measZ;
dr[4] = measX;
dr[5] = measY;
dr[6] = measZ;
dr[7] = measX;
dr[8] = measY;
dr[9] = measZ;

dt.Rows.Add(dr);

//if (!InvokeRequired)
//{
// dataGridGeneral.FirstDisplayedScrollingRowIndex dataGridGeneral.RowCount - 1;
//}
//else
//{
// dataGridGeneral.Invoke(new EventHandler(delegate
// {
// dataGridGeneral.FirstDisplayedScrollingRowIndex
= dataGridGeneral.RowCount - 1;
// }));
//}
}


void stableTimer_Elapsed(object sender, ElapsedEventArgs e)
{
AddStuff();
}

}
}
 

Lesen sie die antworten

#1 Frank Dzaebel
25/11/2008 - 21:13 | Warnen spam
Hallo Markus,

ABER, wenn ich die exe builde, und die Applikation auf
einem anderen Rechner laufen lasse, dann haengt die
Applikation sobald die vertical scroll bar angezeigt
werden muesste.



Füge hinter new Timer() folgendes ein:

stableTimer.SynchronizingObject = this;

es kann auch Probleme bei der letzten Zeile geben.
Dazu kannst Du ggf. folgendes einfügen:

dataGridGeneral.AllowUserToAddRows = false;



ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen