Utilisateur anonyme
-
12 juil. 2005 à 16:00
Utilisateur anonyme -
12 juil. 2005 à 19:44
J'essaye d'ajouter une nouvelle ligne à un datagridview depuis un autre thread sur une autre Class. Si je ne suis pas sur un thread pour lancer la commande d'ajout d'un nouvelle ligne ca se passe bien mais ca me pose un problème qui m'a poussé avoir besoin de ce thread (calcule lourd et donc freeze de l'interface). Donc j'ai besoin de ce thread mais quand je passe par lui et que je veux ajouter une nouvelle ligne j'obtient un message d'erreur qui me dit que je dois ajouter des colonnes avant d'ajouter des lignes. Ce qui montre a mon avis que je dois etre sur un mauvais thread malgrès que j'ai essayé de passer par un invoke comme montre l'example du code ci-dessous. Il faut noter aussi que je débute en C# mais je viens du Java.
public A () {
Thread t = new Thread(new ThreadStart(launch));
t.start();
//if i don't use a thread here and i directly call launch() the code works except i have my freeze problem
}
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 12 juil. 2005 à 17:18
Voila, de cette facon ca va marcher.
Apparement, tu es obligé d'ajouter un DataGridViewColumn a ton DataGridView
Autrement, sache que, a l'instar des accesseurs en java, en C# on a les
propriétés (avec des méthodes get et set, voir comment j'ai fait pour
la variable gui)
Sinon, j'aurais mis le thread dans la classe gui, mais tu as peut etre une raison d'avoir créé une classe séparée
Mx
<hr size="2" width="100%">
using System;
using System.Threading;
using System.Windows.Forms;
namespace Test
{
public class MainClass
{
private static Gui gui;
public static void Main()
{
Application.EnableVisualStyles();
gui = new Gui();
Application.Run(gui);
}
public static Test.Gui Gui
{
get { return gui; }
// set { gui = value; }
}
}
public class A
{
private Thread t;
public A()
{
t = new Thread(new ThreadStart(launch));
}
public void StartThread()
{
t.Start();
}
public void launch()
{
Object[] row = { "a", "b", "c", "d" };
Gui gui = MainClass.Gui;
gui.Invoke(new Gui.addRow(gui.addRowObject), new object[] { row });