Skip to content

Commit 4a34645

Browse files
committed
MainWIndow:
- Property PollReserve removed. - Buzzer1_DrawButton: Play sound for pressed button. - Buzzer2_DrawButton: Play sound for pressed button. - PollBuzzer_Tick(): Query BuzzerDevices parallel. BuzzerUI: - SetBuzzer(): Thread safe for new PollBuzzer_Tick()
1 parent a87994a commit 4a34645

File tree

2 files changed

+54
-35
lines changed

2 files changed

+54
-35
lines changed

SJ.Buzzer/Controls/BuzzerUI.cs

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
* @link https://stefanjahn.de
1111
*
1212
* @date 21.05.2021
13-
* @version 20210524
13+
* @version 20210528
1414
* @license http://www.gnu.org/copyleft/gpl.html
1515
* ------------------------------------------------------------------------
1616
* This program is free software: you can redistribute it and/or modify
@@ -41,6 +41,16 @@ namespace SJ.App.Buzzer.Controls
4141
/// </summary>
4242
public partial class BuzzerUI : UserControl
4343
{
44+
#region Delegates
45+
46+
/// <summary>
47+
/// Aufruf von Methoden aus einem anderem Thread heraus.
48+
/// </summary>
49+
private delegate void CallMethodDelegate();
50+
51+
#endregion
52+
53+
4454
#region Attribute
4555

4656
/// <summary>
@@ -240,17 +250,32 @@ public void SetButton( BuzzerButton buttonColor, bool pressed )
240250
}
241251
}
242252

253+
254+
243255
/// <summary>
244-
/// Buzzerknopf ein-/ausscahlten.
256+
/// Buzzerknopf ein-/ausschalten.
245257
/// </summary>
246258
/// <param name="pressed">True = Gedrueckt</param>
247259
public void SetBuzzer( bool pressed )
248260
{
249261
BuzzerPressed = pressed;
250262
DrawBuzzer( pnlBuzzer.CreateGraphics() );
251-
pnlBuzzer.Refresh();
263+
264+
if( pnlBuzzer.InvokeRequired )
265+
{
266+
Invoke( new CallMethodDelegate( PollBuzzer ) );
267+
}
268+
else
269+
{
270+
pnlBuzzer.Refresh();
271+
}
252272
}
253273

274+
/// <summary>
275+
/// Grafik Buzzerknopf aktualisieren.
276+
/// </summary>
277+
private void PollBuzzer() => pnlBuzzer.Refresh();
278+
254279
/// <summary>
255280
/// Button-Objekt abfragen.
256281
/// </summary>

SJ.Buzzer/Forms/MainWindow.cs

Lines changed: 26 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
using System.Collections.Generic;
3333
using System.Drawing;
3434
using System.Threading;
35+
using System.Threading.Tasks;
3536
using System.Windows.Forms;
3637

3738
using SharpDX.XAudio2;
@@ -63,10 +64,7 @@ public partial class MainWindow : Form
6364
/// </summary>
6465
private XAudio2 AudioDevice
6566
{
66-
get
67-
{
68-
return _AudioDevice;
69-
}
67+
get => _AudioDevice;
7068
set
7169
{
7270
_AudioDevice = value;
@@ -124,16 +122,6 @@ private Dictionary<BuzzerNumber, BuzzerUI> ListBuzzer2UI
124122
set;
125123
}
126124

127-
/// <summary>
128-
/// True = Buzzer in verkehrter Reihenfolge abfragen.
129-
/// </summary>
130-
private bool PollReverse
131-
{
132-
get;
133-
set;
134-
}
135-
136-
137125
/// <summary>
138126
/// Timer fuer die Abfrage des Buzzers.
139127
/// </summary>
@@ -238,8 +226,6 @@ public MainWindow()
238226
BuzzerNumber.Four
239227
};
240228

241-
242-
PollReverse = false;
243229
LastWindowState = WindowState;
244230
SetLanguage = string.Empty;
245231

@@ -1127,6 +1113,16 @@ private void ChangeLanguage( string language )
11271113
/// <param name="buttonFound">True = Erster Button eines Buzzers wurde gedrueckt</param>
11281114
private void Buzzer1_DrawButton( object sender, BuzzerNumber buzzerNumber, BuzzerButton buzzerButton, bool isPressed, bool buzzerFound, bool buttonFound )
11291115
{
1116+
if( buzzerFound )
1117+
{
1118+
ListSounds[Soundfile.BuzzerPressed].Play();
1119+
}
1120+
1121+
if( buttonFound )
1122+
{
1123+
ListSounds[Soundfile.ButtonClick].Play();
1124+
}
1125+
11301126
if( buzzerButton == BuzzerButton.Buzzer )
11311127
{
11321128
ListBuzzer1UI[buzzerNumber].SetBuzzer( isPressed );
@@ -1137,7 +1133,6 @@ private void Buzzer1_DrawButton( object sender, BuzzerNumber buzzerNumber, Buzze
11371133
}
11381134
}
11391135

1140-
11411136
/// <summary>
11421137
/// Button auf dem Buzzer #2 zeichnen.
11431138
/// </summary>
@@ -1149,6 +1144,16 @@ private void Buzzer1_DrawButton( object sender, BuzzerNumber buzzerNumber, Buzze
11491144
/// <param name="buttonFound">True = Erster Button eines Buzzers wurde gedrueckt</param>
11501145
private void Buzzer2_DrawButton( object sender, BuzzerNumber buzzerNumber, BuzzerButton buzzerButton, bool isPressed, bool buzzerFound, bool buttonFound )
11511146
{
1147+
if( buzzerFound )
1148+
{
1149+
ListSounds[Soundfile.BuzzerPressed].Play();
1150+
}
1151+
1152+
if( buttonFound )
1153+
{
1154+
ListSounds[Soundfile.ButtonClick].Play();
1155+
}
1156+
11521157
if( buzzerButton == BuzzerButton.Buzzer )
11531158
{
11541159
ListBuzzer2UI[buzzerNumber].SetBuzzer( isPressed );
@@ -1175,21 +1180,10 @@ private void Buzzer2_DrawButton( object sender, BuzzerNumber buzzerNumber, Buzze
11751180
/// <summary>
11761181
/// Buzzer abfragen.
11771182
/// </summary>
1178-
private void PollBuzzer_Tick( object sender, EventArgs e )
1179-
{
1180-
if( PollReverse )
1181-
{
1182-
BuzzerDevice2.Poll();
1183-
BuzzerDevice1.Poll();
1184-
}
1185-
else
1186-
{
1187-
BuzzerDevice1.Poll();
1188-
BuzzerDevice2.Poll();
1189-
}
1190-
1191-
PollReverse = !PollReverse;
1192-
}
1183+
private void PollBuzzer_Tick( object sender, EventArgs e ) => Parallel.Invoke(
1184+
() => BuzzerDevice1.Poll(),
1185+
() => BuzzerDevice2.Poll()
1186+
);
11931187

11941188

11951189
/// <summary>

0 commit comments

Comments
 (0)