2012-02-15 10 views
7

Mam zadanie łączenia obrazu, który może zająć dużo czasu, więc mogę go uruchomić jako zadanie oddzielnym jak tenJak rozwiązać konwersję macierzy współzmiennej?

var result = openFileDialog.ShowDialog(); 
BeginInvoke(new Action<string[]>(StitchTask), openFileDialog.FileNames); 

private void StitchTask(string[] fileNames) 
{ 
    // this task could take a lot of time 
} 

Czy muszę się martwić o co wariantem tablicy ostrzeżenia konwersji poniżej lub robię coś źle?

Co-wariant z tablicą konwersji string [] do obiektu [] może spowodować czasie wykonywania operacji zapisu na wyjątek

+1

Co daje takie ostrzeżenie? Nic nie widzę, używając 'object []' ... –

+0

ReSharper podaje ostrzeżenie. – jacknad

Odpowiedz

13

Rozumiem - problemem jest to, że jesteś przepuszczanie string[] jakby to były tablica argumentów dla delegata, gdy rzeczywiście chcesz go jako pojedynczy argumentu:

BeginInvoke(new Action<string[]>(StitchTask), 
      new object[] { openFileDialog.FileNames }); 

Cokolwiek daje ostrzeżenie ostrzega o niejawna konwersja string[] do object[], co jest uzasadnione, ponieważ coś biorąc parametr object[]może spróbować napisać:

array[0] = new object(); 

W tym przypadku to nie jest problem ... ale fakt, że spróbuje zmapować każdy ciąg do osobnego parametru delegata , jest problemem o numerze.

Powiązane problemy