Hiya,
Zou iemand mij met het volgende probleem kunnen helpen?
MainForm:
Creeërd eigen instantie van een class. Aan deze class word een functie via een delegate meegegeven. Deze functie zal een progress bar value aanpassen aan de waarde die deze terug krijgt. (code below)
Klasse:
Deze classe start een thread, en roept de in de MainForm meegegeven functie (van de delegate) aan. De functie van de main form word aangeroepen, echter krijg ik een exception bij het toewijzen van de value aan de progress bar. (code below)
Deze uitzondering word getriggerd:
Thx!
Zou iemand mij met het volgende probleem kunnen helpen?
MainForm:
Creeërd eigen instantie van een class. Aan deze class word een functie via een delegate meegegeven. Deze functie zal een progress bar value aanpassen aan de waarde die deze terug krijgt. (code below)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public void SetProgress(int value)
{
progressBar1.Value = value;
}
private void button1_Click(object sender, EventArgs e)
{
dsProgress.ds = new TestDataSet();
dsProgress.ProgressEvent += new DataSetProgressTracker.ProgressEventHandler(SetProgress);
dsProgress.StartProgressTracker();
} |
Klasse:
Deze classe start een thread, en roept de in de MainForm meegegeven functie (van de delegate) aan. De functie van de main form word aangeroepen, echter krijg ik een exception bij het toewijzen van de value aan de progress bar. (code below)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
| class DataSetProgressTracker
{
public TestDataSet ds = null;
private Thread dsFillThread = null;
private Thread dsProgressThread = null;
public delegate void ProgressEventHandler();
public event ProgressEventHandler ProgressEvent;
int intTotalRows = 0;
int intProgress = 0;
bool IsLoaded = false;
private int GetRecordCount()
{
return 500;
}
private void SetProgress(int value)
{
intProgress = value;
ProgressEvent(value);
}
private void ProgressTrackCallBackFunction()
{
while (this.IsLoaded == false)
{
int value = (ds.TestData.Count * 100) / this.intTotalRows;
SetProgress(value);
Thread.Sleep(50);
}
}
private void DataSetFillCallBackFunction()
{
IsLoaded = false;
ds.Fill();
IsLoaded = true;
}
public void StartProgressTracker()
{
intTotalRows = GetRecordCount();
Thread DataSetProgressThread = new Thread(new ThreadStart(ProgressTrackCallBackFunction));
Thread DataSetFillThread = new Thread(new ThreadStart(DataSetFillCallBackFunction));
DataSetProgressThread.Start();
DataSetFillThread.Start();
}
} |
Deze uitzondering word getriggerd:
Nu kan ik deze value wijzigen om de applicatie te laten werken, maar ik vind dat geen mooie oplossing:Cross-thread operation not valid: Control 'progressBar1' accessed from a thread other than the thread it was created on.
code:
1
| CheckForIllegalCrossThreadCalls = false; |
Thx!
[ Voor 6% gewijzigd door opicron op 15-08-2006 14:25 ]