2012-02-15 41 views
7

我有可能需要很多時間的圖像拼接的任務,所以我將它運行爲這樣如何解決協變陣列轉換?

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

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

一個單獨的任務,我需要擔心下面的共同變量數組轉換警告或我在做有問題?從string []

聯合變量數組轉換爲一個對象[]可能會導致在寫入操作 運行時異常

+1

什麼給你的警告?我沒有看到任何使用'object []'... – 2012-02-15 15:45:15

+0

ReSharper正在發出警告。 – jacknad 2012-02-15 16:00:21

回答

13

明白了 - 問題是,你傳遞一個string[]彷彿它是自變量爲代表,當你真正想把它當作一個參數的陣列

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

無論傳給你的警告,警告你的string[]object[]隱式轉換,因爲一些服用object[]參數是合理可能嘗試寫:

array[0] = new object(); 

在這種情況下是沒有問題的...但它會嘗試將每個字符串映射到單獨的代理參數的事實是的一個問題。