C# :
Timer 가 0.1초 마다 Tick 될 때 마다 List 객체 값이 계속 변하고 있고
이 와중에 일정한 타이밍(혹은 아무때나)에 외부에서 그 List값을 조회 하려고 하면
런타임에서 인보크 에러를 뿜는다.
어찌 하면 좋을까?
코드는 대략 이러하다
public static List<int> RankList = new List<int>(10); // 선수 10명의 순위가 시시각각 변할꺼다.
Timer_Tick( 센더 , 아규먼트) //
{
for (int m=0; m<RankList.Count() ; m++)
{
RankList.IndexOf(m) = GetMemberRankFromRecord(m); // 어설픈 알고리즘 같지만 요지는 그게 아니고
}
}
public static int GetCurrentRankByNumber(int arg) // 어떠한 경로로 RankList 에 접근하려 한다.
{
return RankList.IndexOf(arg); // <------- 하필 마침 절묘한 타이밍에 타이머가 틱이고 for loop 동안 여기로 관통하면 인보크 바이올레이션이 발생하는듯하다.
}
이걸 해결 하는 방법이 있으면 좀 알려주라
Timer 가 0.1초 마다 Tick 될 때 마다 List 객체 값이 계속 변하고 있고
이 와중에 일정한 타이밍(혹은 아무때나)에 외부에서 그 List값을 조회 하려고 하면
런타임에서 인보크 에러를 뿜는다.
어찌 하면 좋을까?
코드는 대략 이러하다
public static List<int> RankList = new List<int>(10); // 선수 10명의 순위가 시시각각 변할꺼다.
Timer_Tick( 센더 , 아규먼트) //
{
for (int m=0; m<RankList.Count() ; m++)
{
RankList.IndexOf(m) = GetMemberRankFromRecord(m); // 어설픈 알고리즘 같지만 요지는 그게 아니고
}
}
public static int GetCurrentRankByNumber(int arg) // 어떠한 경로로 RankList 에 접근하려 한다.
{
return RankList.IndexOf(arg); // <------- 하필 마침 절묘한 타이밍에 타이머가 틱이고 for loop 동안 여기로 관통하면 인보크 바이올레이션이 발생하는듯하다.
}
이걸 해결 하는 방법이 있으면 좀 알려주라
틱을멈추세욘
return 하기전에 틱멈추고 하고나서 다시 틱하고 ㅇㅇ
매우 간단한 방법이네ㅋ 동기화니 뭐니 그런 기법 같은것도 알고 싶어. Lock 이나 모니터링이나 그런거 보이긴 하던데 너무 낯설드라 ㅠ
익셉션 생까고 재도전
lock 구문 써
lock(RankList){ 니가 하고싶은거 }