Pergunta

Há algum tempo, escrevi um controle do usuário do Silverlight que tinha um recurso de importação/exportação de CSV. Isso está funcionando bem, até recentemente descobri errar em um cenário. Isso pode ter sido devido à mudança para Silverlight 3.

O erro:
Mensagem: Erro não tratado no Silverlight 2 Application
Código: 4004
Categoria: ManagedRuntimeError
Mensagem: System.Security.SecurityException: As diálogos devem ser iniciadas pelo usuário.
em system.windows.controls.openfiledialog.showdialog ()
em mycontrol.openimportfiledialog ()
no ...

O código:

private void BrowseFileButton_Click(object sender, RoutedEventArgs e)
{
    if (string.IsNullOrEmpty(lblFileName.Text))
    {
        if (MessageBox.Show("Are you sure you want to change the Import file?", "Import", MessageBoxButton.OKCancel) == MessageBoxResult.Cancel)
        {
            return;
        }
    }
    EnableDisableImportButtons(false);
    var fileName = OpenImportFileDialog();
    lblFileName.Text = fileName ?? string.Empty;
    EnableDisableImportButtons(true);    
}

private string OpenImportFileDialog()
{
    var dlg = new OpenFileDialog { Filter = "CSV Files (*.csv)|*.csv" };
    if (dlg.ShowDialog() ?? false)
    {
        using (var reader = dlg.File.OpenText())
        {
            string fileName;
            //process the file here and store fileName in variable
            return fileName;
        }
    }
}

Posso abrir um arquivo de importação, mas se quiser alterar o arquivo de importação e reabrir a caixa de diálogo do arquivo, ele erros. Alguém sabe por que esse é o caso?
Além disso, estou tendo problemas para depurar porque colocar um ponto de interrupção na mesma linha (ou anterior) na chamada dlg.showdialog () parece fazer com que esse erro também apareça. Qualquer ajuda seria apreciada?

Foi útil?

Solução

Você faz duas ações em um usuário clique.

Você mostra uma caixa de mensagem que efetivamente usa sua permissão para mostrar uma caixa de diálogo na ação do usuário.

Você tenta mostrar a caixa de diálogo, já que esta é uma segunda caixa de diálogo na ação do usuário que não é permitida.

Livre -se da caixa de diálogo de confirmação e você ficará bem.

Outras dicas

Remova os pontos de interrupção antes if (dlg.showdialog () ?? false) O código executará seu trabalho para mim.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top