我创建了一个可以拍摄照片的应用,在保存照片后,它会转到另一个页面,比如page1.xaml
,但是我收到错误:|
错误为An unhandled exception of type 'System.UnauthorizedAccessException' occurred in System.Windows.ni.dll
,消息显示Invalid cross-thread access.
这是什么?我在开发WP应用程序方面有点新手。
这是我的代码
void cam_CaptureImageAvailable(object sender, Microsoft.Devices.ContentReadyEventArgs e)
{
string fileName = savedCounter + ".jpg";
try
{ // Write message to the UI thread.
Deployment.Current.Dispatcher.BeginInvoke(delegate()
{
txtDebug.Text = "Captured image available, saving picture.";
});
// Save picture to the library camera roll.
library.SavePictureToCameraRoll(fileName, e.ImageStream);
// Write message to the UI thread.
Deployment.Current.Dispatcher.BeginInvoke(delegate()
{
txtDebug.Text = "Picture has been saved to camera roll.";
});
// Set the position of the stream back to start
e.ImageStream.Seek(0, SeekOrigin.Begin);
// Save picture as JPEG to isolated storage.
using (IsolatedStorageFile isStore = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream targetStream = isStore.OpenFile(fileName, FileMode.Create, FileAccess.Write))
{
// Initialize the buffer for 4KB disk pages.
byte[] readBuffer = new byte[4096];
int bytesRead = -1;
// Copy the image to isolated storage.
while ((bytesRead = e.ImageStream.Read(readBuffer, 0, readBuffer.Length)) > 0)
{
targetStream.Write(readBuffer, 0, bytesRead);
}
}
}
// Write message to the UI thread.
Deployment.Current.Dispatcher.BeginInvoke(delegate()
{
txtDebug.Text = "Picture has been saved to isolated storage.";
});
}
finally
{
// Close image stream
e.ImageStream.Close();
GoTo();
}
}
private void GoTo()
{
this.NavigationService.Navigate(new Uri("/page1.xaml", Urikind.Relative));
}
答案 0 :(得分:4)
您正在从后台线程调用GoTo
方法。在导航时,您需要在foregroud线程上执行此操作。
private void GoTo()
{
Dispatcher.BeginInvoke(() =>
{
this.NavigationService.Navigate(new Uri("/page1.xaml", Urikind.Relative));
});
}