2014-01-23 6 views
0

다른 스레드에서 ListView를 변경하려고합니다. 오류 : "System.String 유형의 객체를 System.String []"유형으로 변환 할 수 없습니다. 문자열 []을 매개 변수로 전달하지 않으면 컴파일러는 코드를 컴파일하지 않습니다. 무엇이 잘못 됐는지 알 수 있습니까?메서드를 호출 할 수 없습니다.

public delegate void UpdateListView(string[] request); 
public void UpdateComponents(string[] request) 
{ 
    for (int j = 0; j < request.Length; j++) 
    { 
     switch (request[j]) 
     { 
      case "ListViewSubnetworksChanged": 
       if (listView1.InvokeRequired) 
       { 
        UpdateListView d = new UpdateListView(UpdateComponents); 
        this.Invoke(d, request); 
       } 
       else 
       { 
        listView1.Items.Clear(); 
       } 
       break; 
     } 
    } 
} 

답변

0

이 메서드는 문자열을 전달할 수 없도록 배열을 요청하고 있습니다. 당신은 단지 하나 개의 문자열이있는 경우는 하나의 문자열을 포함하는 새로운 배열을 생성하고 호출하는 방법을 다음과 같이 할 수 있습니다

string val = "Data"; 
string[] arrayVal = new string[] { val }; 
UpdateComponents(arrayVal); 

를 또는 하나 개의 라인으로 단순화하기 : 아무 문제

UpdateComponents(new string[] { val }); 
0

없습니다. 컴파일러에서 구문 오류가 발생하여 문자열을 매개 변수로 사용하려고 시도하는 반면 Invoke() 필요는 문자열 [] 데이터를 올바른 형식으로 제공해야합니다. STRING을 (를) 사용할 수 있습니다. ToArray() 집계 함수는, 그런데 문자열 []

로 문자열을 변환 당신이 컬렉션의 데이터를 반복하려면이 경우 의 foreach에게 루프 대신에 위해를 사용합니다.

0

질문과 코드를 검토해 보면 처음부터 재귀 호출을 사용하는 이유를 알 수 없습니다. 다음과 같이 나는 당신의 코드를 단순화 것 :

private void UpdateComponents(string[] request) 
{ 
    for (int j = 0; j < request.Length; j++) 
    { 
     switch (request[j]) 
     { 
      case "ListViewSubnetworksChanged": 
       ClearListViewItemsSafe(); 
       break; 
     } 
    } 
} 

private void ClearListViewItemsSafe() 
{ 
    if (listView1.InvokeRequired) 
    { 
     this.Invoke(new Action(() => listView1.Items.Clear())); 
    } 
    else 
    { 
     listView1.Items.Clear(); 
    } 
} 

또한, 그 코드 블록은 실제로 당신이 확인 다른 case 조건이 있다고 가정하고, 당신이 그 다른 case 블록 j에 대한 몇 가지 사용이 있는지 확인하십시오. 이들 중 어느 것도 사실이 아니라면 블록을 더 최적화하는 것이 좋습니다.

private void UpdateComponents(string[] request) 
{ 
    foreach (string r in request) 
    { 
     if (r == "ListViewSubnetworksChanged") 
     { 
      ClearListViewItemsSafe(); 
      return; 
     } 
    } 
} 
관련 문제