我无法使用图片发送facebook状态。找到了代码,但它抛出了 例外
The Safe handle is closed
代码如下:
public static Stream ImageToShare
{
set
{
try
{
using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (myIsolatedStorage.FileExists(ImageToShareKey))
myIsolatedStorage.DeleteFile(ImageToShareKey);
IsolatedStorageFileStream fileStream = myIsolatedStorage.CreateFile(ImageToShareKey);
StreamResourceInfo sri = null;
Uri uri = new Uri(ImageToShareKey, UriKind.Relative);
sri = Application.GetResourceStream(uri);
BitmapImage bitmap = new BitmapImage();
bitmap.SetSource(value);
//bitmap.SetSource(sri.Stream);
WriteableBitmap wb = new WriteableBitmap(bitmap);
Extensions.SaveJpeg(wb, fileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);
fileStream.Close();
}
}
catch (Exception ex)
{
AppHelper.ErrorOccured(ex);
}
}
private void postFBWithImage()
{
try
{
using (IsolatedStorageFile myFile = IsolatedStorageFile.GetUserStoreForApplication())
using (IsolatedStorageFileStream stream = myFile.OpenFile("SharePhoto", FileMode.Open, FileAccess.Read))
using (var imgFile = new FacebookMediaStream
{
ContentType = "image/jpeg",
FileName = Path.GetFileName(imgPath.Text),
}.SetValue(stream))
{
var fb = new FacebookClient(AppSettings.FacebookPIN);
fb.PostCompleted += (o, args) =>
{
if (args.Error != null)
{
notPosted(args);
return;
}
Dispatcher.BeginInvoke(() =>
{
posted();
});
};
fb.PostAsync("me/photos", new { message = ShareComments, imgFile });
}
}
catch (Exception ex)
{
AppHelper.ErrorOccured(ex);
postFBWithoutImage();
}
}
答案 0 :(得分:1)
通过媒体流发送带有Facebook状态的图像并不好,因为它会给isolatedStorage流带来麻烦。最好的方法是在Dictionary对象而不是匿名对象中移动参数。所以总共有2个变化。一个从FacebookMediaStream到FacebookMediaObject,第二个是使用Dictionary对象而不是使用匿名对象
以下是描述该场景的代码。
private void postFBWithImage()
{
try
{
using (IsolatedStorageFile myFile = IsolatedStorageFile.GetUserStoreForApplication())
using (IsolatedStorageFileStream stream = myFile.OpenFile(AppSettings.ImageToShareKey, FileMode.Open, FileAccess.Read))
{
byte[] byteArr = null;
using (var binRdr = new BinaryReader(stream))
using (var memStr = new MemoryStream())
{
const int ReadSize = 8196;
int chunkSize = 0;
do
{
byte[] buf = new byte[ReadSize];
chunkSize = binRdr.Read(buf, 0, ReadSize);
memStr.Write(buf, 0, ReadSize);
} while (chunkSize > 0);
byteArr = new byte[memStr.Length];
memStr.Position = 0;
memStr.Read(byteArr, 0, (int)memStr.Length);
}
var fb = new FacebookClient(AppSettings.FacebookPIN);
fb.PostCompleted += (o, args) =>
{
if (args.Error != null)
{
notPosted(args);
return;
}
Dispatcher.BeginInvoke(() =>
{
posted();
});
};
var parameters = new Dictionary<string, object>();
parameters["message"] = ShareComments;
parameters["file"] = new FacebookMediaObject
{
ContentType = "image/jpeg",
FileName = "image.jpeg",
}.SetValue(byteArr);
fb.PostAsync("me/photos", parameters);
}
}
catch (Exception ex)
{
AppHelper.ErrorOccured(ex);
}
}