Xaml 将异常获取为";在意外时间调用了一个方法;在windows 8 metro应用程序中使用共享合同共享文件时?

Xaml 将异常获取为";在意外时间调用了一个方法;在windows 8 metro应用程序中使用共享合同共享文件时?,xaml,email,windows-runtime,windows-store-apps,Xaml,Email,Windows Runtime,Windows Store Apps,我正在尝试使用我的应用程序中的共享合同共享文件:- public async void SendingEmail(UtilityClass objselecteditem) { try { StorageFolder tempFolder = Windows.Storage.ApplicationData.Current.LocalFolder; StorageFile sampleFile = await tempFolder.

我正在尝试使用我的应用程序中的共享合同共享文件:-

public async void SendingEmail(UtilityClass objselecteditem)
{
    try
    {
        StorageFolder tempFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        StorageFile sampleFile = await 
        tempFolder.CreateFileAsync("StundentDetails.html",   
            CreationCollisionOption.ReplaceExisting);
        await Windows.Storage.FileIO.WriteTextAsync(sampleFile, htmlBuilder.ToString());
        await RegisterForShare();                        
    }
    catch (Exception ex)
    {    
    }
}
我在上述方法中调用此RegisterForShare():-

private async Task RegisterForShare()
{
    DataTransferManager dataTransferManager = DataTransferManager.GetForCurrentView();       
    dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.ShareStorageItemsHandler);            
    DataTransferManager.ShowShareUI();

}

private async void ShareStorageItemsHandler(DataTransferManager sender, DataRequestedEventArgs e)          
{
    DataRequest request = e.Request;
    request.Data.Properties.Title = "Student Confirmation Email";
    request.Data.Properties.Description = "Student Details";



    // Because we are making async calls in the DataRequested event handler,
    // we need to get the deferral first.
    DataRequestDeferral deferral =  request.GetDeferral();

    // Make sure we always call Complete on the deferral.
    try
    {
        StorageFolder tempFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
        StorageFile EmailFile = await tempFolder.GetFileAsync("StundentDetails.html");      
        List<IStorageItem> storageItems = new List<IStorageItem>();
        storageItems.Add(EmailFile);
        request.Data.SetStorageItems(storageItems);


    }
    finally
    {
        deferral.Complete();
    }
}
private async Task RegisterForShare()
{
DataTransferManager DataTransferManager=DataTransferManager.GetForCurrentView();
dataTransferManager.DataRequested+=新类型DevenHandler(this.ShareStorageItemsHandler);
DataTransferManager.ShowShareUI();
}
专用异步void ShareStorageItemsHandler(DataTransferManager发送方、DataRequestedEventArgs e)
{
数据请求=e.请求;
request.Data.Properties.Title=“学生确认电子邮件”;
request.Data.Properties.Description=“学生详细信息”;
//因为我们正在DataRequested事件处理程序中进行异步调用,
//我们需要先得到延期。
DataRequestDeleral deleral=request.getDeleral();
//确保我们总是要求完成延期。
尝试
{
StorageFolder tempFolder=Windows.Storage.ApplicationData.Current.LocalFolder;
StorageFile EmailFile=await tempFolder.GetFileAsync(“StundentDetails.html”);
List storageItems=新列表();
添加(电子邮件文件);
请求.数据.设置存储项(存储项);
}
最后
{
延迟。完成();
}
}
这是它第一次正常运行,正在打开共享合同供我共享文件,但如果我再次尝试共享它(第二次共享文件),它会抛出一个异常,说“在意外时间调用了一个方法”,请让我知道我是否做错了,请纠正我


提前感谢。

尝试替换此行:

dataTransferManager.DataRequested += new TypedEventHandler<DataTransferManager, DataRequestedEventArgs>(this.ShareStorageItemsHandler); 

您不应该多次执行“DataRequested+=”,也不应该在用户触摸屏幕键盘或鼠标时调用ShowShareUI。只是猜测而已。您没有说哪一行引发异常。首先感谢您的回复,dataTransferManager.DataRequested+=new-TypedEventHandler(this.ShareStorageItemsHandler);是在第二次尝试时抛出异常的那一行。请让我知道我该怎么做,不要多次呼叫,谢谢
dataTransferManager.DataRequested -= ShareStorageItemsHandler;
dataTransferManager.DataRequested += ShareStorageItemsHandler;