我知道這個主題上有很多線程,我嘗試從VB實現(翻譯)this one到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
,但我得到出界試圖做到這一點的。他們也不會將它投射到int
,但.Read
不會將long
作爲參數。
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
謝謝,我錯過了這一點,並將留在後面的帖子。 – Tim