如何处理同变量数组转换



我有一个图像拼接任务,可能需要很多时间,所以我把它作为一个单独的任务来运行,就像这个一样

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[]就好像它是委托的参数数组一样:

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

无论给你什么警告,都是在警告你string[]object[]的隐式转换,这是合理的,因为采用object[]参数的东西可能试图写入:

array[0] = new object();

在这种情况下,这不是问题。。。但它会尝试将每个字符串映射到一个单独的委托参数,这是一个问题。

最新更新