Ich bin auf einer Klasse arbeiten, die wie folgt aussieht:Ereignisse Cross-Threads aufrufen?
public class MatchmakingService {
private bool working;
private List<MatchmakingUser> matchmakingUsers;
// ...
public MatchmakingService()
{
matchmakingUsers = new List<MatchmakingUser>();
}
public void StartService() {
var thread = new Thread(this.MatchmakingWork);
working = true;
thread.Start();
}
void MatchmakingWork() {
while (working)
{
// some work, match found!
{
if(onMatchFound != null)
onMatchFound(this, new NewMatchEventArgs(matchmakingUsers[i], matchmakingUsers[j]);
}
Thread.Sleep(1000);
}
}
}
Normalerweise, wenn eine Übereinstimmung gefunden wird würde ich Feuer nur ein Ereignis onMatchFound und nenne ihn einen Tag, aber da der Thread des Dienstes anders, und ein Teilnehmer dieses Ereignisses wird auf einem anderen Thread sein - wie damit umzugehen? Ich habe gelesen, dass es nicht sicher ist, und wenn es wahr ist, was sind dann meine Alternativen?
Hinweis: Ich arbeite nicht mit WinForms, also keine Controls Invoke-Shenanigans.
Dies ist abhängig von Situation. An sich ist nichts verkehrt, wenn sich der Ereignisabonnent in einem anderen Thread befindet (insbesondere, wenn Sie nicht auf der UI-Plattform arbeiten und nichts an den UI-Thread senden müssen). – Evk