2011-09-19 4 views
0

4 개의 탭이 포함 된 WPF 응용 프로그램이 있습니다. Tab1은 응용 프로그램과 함께로드 된 첫 번째 탭입니다. 나는처럼 보이는 Tab1Load 방법 (탭의 이름)이 있습니다왜 정적 객체를 설정하면 메서드 호출이 중단됩니까?

private void Tab1Load(object sender, RoutedEventArgs e) 
    { 
     myConfig.LoadConfigurationData(); 
     XiphosDB.DataContext = Xiphos.XiphosDbNames; 
    } 
MyConfig를이 Window1.xaml.cs의 상단에 선언

LoadConfigData myConfig = new LoadConfigData(); 

LoadConfigData 보이는 파일을 같은 :

public void LoadConfigurationData() 
    { 
     LoadGen2Data(); 
     LoadXiphosData(); 
     LoadTestConsumerData(); 
    } 

첫 번째 메서드 호출 인 LoadGen2Data는 끝까지 정적 개체로 값을 설정합니다. 호출은 다음과 같습니다

var count = 0; 
     foreach (var name in Gen2.allFiNames) 
     { 
      Gen2.ApiKeys.Add(name, APIKeys[count]); 
      Gen2.ConnectStrings.Add(name, connectStrings[count]); 
      Gen2.LongNames.Add(name, LongNames[count]); 
      count++; 
     } 

세대 선언은 다음과 같습니다 Gen2.ApiKeys.Add가 호출

public class Gen2 
{ 
    public static List<string> allFiNames { get; set; } 

    public static Dictionary<string, string> LongNames { get; set; } 
    public static Dictionary<string, string> ApiKeys { get; set; } 
    public static Dictionary<string, string> ConnectStrings { get; set; } 
} 

직후, 응용 프로그램이 나머지를 호출하지 않고는 (LoadGen2Data)에있는 방법에서 건너 뜁니다 Add 문을 닫은 다음 나머지 두 메서드 (LoadXiphosData 및 LoadTestConsumerData)를 호출하지 않고 LoadConfigurationData 메서드를 종료합니다.

foreach 루프의 맨 위로 이동하여 "name"값이 채워지고 APIKeys [count]가 합법적 인 값 (GUID)을 제공하는지 확인했습니다.

오류 메시지가 표시되지 않습니다. 다른 디버그 포인트는 잡히지 않으며 문제없이 (그리고 데이터가없는) 응용 프로그램 GUI를 이동할 수 있습니다.

문제는 무엇입니까?

감사합니다,

제이슨

+0

코드가 충분하지 않습니다.이 전역 변수는 무엇입니까? 문제를 보여주는 짧지 만 완전한 * 프로그램을 만드십시오. 개인적으로 나는 어쨌든이 세상을 갖는 것을 피하려고 노력할 것입니다. 솔직히 말해서 ... –

답변

1

당신은 타격되는 NullReferenceException에서 :

public static Dictionary<string, string> LongNames { get; set; } 

자동 생성 된 백업 속성이 null 때문이다. 이는 다른 Dictionary 변수와 List 변수에서도 발생합니다.

이 같은 문제를 해결할 수 있습니다

private static Dictionary<string, string> longNames = new Dictionary<string, string>(); 

public static Dictionary<string, string> LongNames { get { return longNames; } set { longNames = value; } } 

당신은이 경우 세터를 건너 뛸 수 있습니다.

public class Gen2 
{ 
    private static List<string> allFiNames = new List<string> allFiNames(); 
    public static List<string> AllFiNames { get { return allFiNames; } } 

    private static Dictionary<string, string> longNames = new Dictionary<string, string>(); 
    public static Dictionary<string, string> LongNames { get { return longNames; } } 

    private static Dictionary<string, string> apiKeys = new Dictionary<string, string>(); 
    public static Dictionary<string, string> ApiKeys { get { return apiKeys; } } 

    private static Dictionary<string, string> connectStrings = Dictionary<string, string>(); 
    public static Dictionary<string, string> ConnectStrings { get { return connectStrings; } } 
} 
+0

고마워요. 개발자 중 한 명이 같은 결론에 도달했습니다. WPF가 오류를 무시하고 계속 진행하는 것이 다소 실망 스럽습니다. – Jason