vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

C# Ecke
Multithreading und andere Controls 
Autor: spike24
Datum: 27.07.06 16:46

Grüssi

habe mir jetzt einen schönen Anwendungsrumpf mit MVC zusammengebastelt (16 Projekte)
dieser ist noch dazu vollkommen Multithreading fähig!!!
und da habe ich jetzt eine frage:

ich habe mir aus geschwindigkeitsgründen eine eigene ComboBox zusammengebastelt (sieht fast gleich aus wie die echte)
diese ComboBox ist ein UserControl
drauf sind eine TextBox, in der TextBox ist ein Button
und ein Progressbar ist auch drauf
in dieser ComboBox habe ich folgenden code

private Thread th;
 
public void Reset()
{
    th = new Thread(LoadData);
    th.Start();
}
 
private void LoadData()
{
    m_DataSource = new oRRoSoft.Data.DataTable();
 
    // das ist das ding das mir die Progressbar weiterzählt
    DataTableActionUpdater dtau = new DataTableActionUpdater(m_Command, pb);
 
    dtau.Maximum = m_Command.Select.Count(m_SQLString);
    pb.Visible = true;
    txt_Value.Enabled = false;
    m_Command.FillIsRunning += new Data.Delegates.Command.FillIsRunningDelegate( _
      Command_FillIsRunning);
    m_Command.CreateDataTable(m_SQLString, m_lWherePI, ( _
    IDataTable)m_DataSource);
 
    pb.Visible = false;
    //dg.PrimaryKey = m_PrimaryKey;
    //dg.DataSource = m_DataSource;
    txt_Value.Enabled = true;
}
es geht um die fett markierte zeile
ich bin da ja in einem anderen thread als die TextBox (wo sie erstellt worde ist)
und kann ja nicht direkt so zugreifen, mittlerweile sonnenklar ;)
aber ich kenne da jetzt zwei möglichkeiten
entweder in der ComboBox:
// statt der fettmarkierten zeile
Multithreading.SetBoolean d = new Multithreading.SetBoolean(txt_Value_Enabled);
this.Invoke(d, new object[] { false });
 
private void txt_Value_Enabled(bool value)
{
    txt_Value.Enabled = value;
}
oder in der TextBox:
new public string Text
{
    get { return base.Text; }
    set
    {
        SetText(value);
    }
}
private void SetText(string value)
{
    if (this.InvokeRequired)
    {
        Multithreading.SetString d = new Multithreading.SetString(SetText);
        this.Invoke(d, new object[] { value });
    }
    else
        base.Text = value;
}
einfacher für die zukunft wäre die zweite methode, allerdings kann es dann passieren das man sich irgendwann mit den thread nicht mehr auskennt und die wild herum gestartet werden, und in der ersten methode muss ich das explicit schreiben das ich in einem thread bin

was verwendet man?
0
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Multithreading und andere Controls1.455spike2427.07.06 16:46
Re: Multithreading und andere Controls854spike2428.07.06 17:36

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel