Как сделать фотографию и отправить ее по электронной почте? - PullRequest
2 голосов
/ 03 февраля 2011

Я бы хотел, чтобы пользователь сделал фотографию, а затем открыл диалоговое окно с приложенной фотографией.Пока я получил это:

private void btnSubmitPhoto_Click(object sender, EventArgs e) 
{ 
    CameraCaptureTask cameraCaptureTask = new CameraCaptureTask(); 
    cameraCaptureTask.Completed += cameraCaptureTask_Completed; 
    cameraCaptureTask.Show(); 
} 

private void cameraCaptureTask_Completed(object sender, PhotoResult e) 
{ 
    if (e.TaskResult == TaskResult.OK) 
    { 
        currentImage = new BitmapImage(); 
        currentImage.SetSource(e.ChosenPhoto); 

        EmailComposeTask ect = new EmailComposeTask();     
    }             
}    

Я не вижу, как добавить вложение в EmailComposeTask.Я что-то упустил?

Ответы [ 2 ]

8 голосов
/ 03 февраля 2011

С текущими инструментами платформы невозможно добавить вложение в электронное письмо с помощью EmailComposeTask.Если вам нужна эта функция, вам придется вручную обрабатывать отправку электронной почты с помощью веб-службы.

2 голосов
/ 04 февраля 2011

Помимо невозможности отправки вложений, существует проблема с тем, как вы используете CameraCaptureTask.

Поскольку эта задача является средством выбора, вы должны кодировать его, чтобы использовать его для учета могилы.

На практике это означает, что ваш экземпляр CameraCaptureTask должен быть на уровне класса, а обработчик событий должен быть подписан в конструкторе страниц.

Если вы этого не сделаетеСделайте это, чтобы страница не знала, как обрабатывать информацию, возвращаемую при возврате задания.

Ваш код должен выглядеть примерно так:

public partial class MainPage : PhoneApplicationPage
{
    CameraCaptureTask cct = new CameraCaptureTask();

    public MainPage()
    {
        InitializeComponent();

        // Any other initialization tasks

        cct.Completed += new EventHandler<PhotoResult>(cct_Completed);
    }

    void cct_Completed(object sender, PhotoResult e)
    {
        // Do something with `e`
    }

    // Or some other appropriate event
    private void Button_Click(object sender, RoutedEventArgs e)
    {
        cct.Show();
    }

Обратите внимание. Это относится ко всем средствам выбора, но не к средствам запуска.

Обновление:
Причина этого заключается в том, как страница «перетягивается» послеприложение захоронено, чтобы открыть селектор.

При возврате из режима селектора будет создан новый экземпляр страницы.Следовательно, это не будет включать никаких записей о обработчиках событий, подписанных в предыдущих экземплярах.Если к завершенному обработчику не будет прикреплено ничего, ваш код для обработки возвращаемых селектором деталей не будет вызываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...