我知道这个主题有很多线程,我尝试将这个线程从 VB 实现(翻译)为 C#。
Table fileContainer = {string FileName, binary File}
这是我的尝试:
partial void FileContainersAddAndEditNew_Execute()
{
Dispatchers.Main.BeginInvoke(() =>
{
OpenFileDialog openDialog = new OpenFileDialog();
if (openDialog.ShowDialog() == true)
{
using (System.IO.FileStream fileData = openDialog.File.OpenRead())
{
long fileLen = fileData.Length;
if (fileLen > 0)
{
Byte[] fileBArray = new Byte[fileLen];
fileData.Read(fileBArray, 0, fileLen);
fileData.Close();
FileContainer fc = this.FileContainers.AddNew();
fc.File = fileBArray;
fc.FileName = openDialog.File.Extension.ToString().ToLower();
}
}
}
});
}
但是代码在这一行失败了:
FileContainer fc = this.FileContainers.AddNew();
出现此错误:
IVisualCollection<T>.AddNew() should not be called from UI Thread.
我有点困惑。我认为:
Dispatchers.Main.BeginInvoke(() =>
阻止了这种情况的发生。还是我做错了?
我注意到的另一件事是 VB 代码使用:
filenLen-1
但我试图做到这一点越界。他们也不会将其转换为 anint
但.Read
不会将 along
作为参数。