Pergunta

Eu tenho esses métodos em um formulário da web asp.net:

public partial class currencies : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{

}

public class Rate
{
    public string to { get; set; }
    public string from { get; set; }
    public double rate { get; set; }
}

double ConvertedAmount { get; set; }

public void Convert(object sender, EventArgs e)
{
    DateTime theDate = DateTime.UtcNow;
    string todayDateTime = theDate.ToString("f");
    double amount = 0d;
    if (double.TryParse(txtAmount.Text.Trim(), out amount))
    {
        string url = string.Format("http://rate-exchange.appspot.com/currency?from={0}&to={1}", ddlFrom.SelectedItem.Value, ddlTo.SelectedItem.Value);
        WebClient client = new WebClient();
        string rates = client.DownloadString(url);
        Rate rate = new JavaScriptSerializer().Deserialize<Rate>(rates);
        ConvertedAmount = amount * rate.rate;
        Label1.Text = ddlFrom.SelectedItem.Value + ": " + amount;
        Label2.Text = ddlTo.SelectedItem.Value + ": " + ConvertedAmount;
        Label3.Text = "Rate as at " + todayDateTime + " is:";
        Label4.Text = " 1 " + ddlFrom.SelectedItem.Value + " = " + rate.rate + " " + ddlTo.SelectedItem.Value;

    }
    else
    {
        ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Invalid amount value.');", true);
    }
}


protected void Button1_Click(object sender, EventArgs e)
{   
    Clipboard.SetText(ConvertedAmount.ToString());
}
}

quando clico no botão 1 para copiar o resultado para a área de transferência, recebo a exceção:O thread atual deve ser definido para o modo STA (Single Thread Apartment) antes de chamar OLE.É a primeira vez que lido com algo assim.O que devo fazer para resolver esse problema?Obrigado por ajudar.

Foi útil?

Solução

Como MSDN estados,

A classe de área de transferência só pode ser usada em threads definidos como o modo de apartamento de threads únicos (STA).

A configuração de STA no ASP.NET não deve ser necessária.Mas você tem certeza de que deseja operar na área de transferência do lado do servidor?Você entende que ele irá operar no servidor área de transferência, não a do cliente?

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