0

C#WinFormにボタンがあります。ユーザーがこのボタンをクリックするたびに、意味を知りたい単語をコピーする準備ができていることを意味します。それから彼はただ単語をコピーします。最後に彼はその言葉の意味を示します。

これを実現するために、クリップボードを検索し、WebサイトのhtmlAgilityパックを使用してクリップボードから単語を取得するタイマーを使用しました。これはこれまでの私のコードです:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.IO;
using HtmlAgilityPack;

namespace HtmlAgilityPack
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            timer1.Enabled = true;
            timer1.Tick += new EventHandler(timer1_Tick);
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text))
            {
                string x = Clipboard.GetText();
                Clipboard.Clear();

                try
                {
                    HtmlWeb web = new HtmlWeb();
                    HtmlDocument doc = web.Load("http://www.bengalinux.org/cgi-bin/abhidhan/index.pl?en_word=" + x);
                    HtmlNodeCollection node = doc.DocumentNode.SelectNodes("//div[@class='dict_entry']//strong[2]");
                    foreach (HtmlNode n in node)
                    {
                        MessageBox.Show(n.InnerText);
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("no");
                }
            }
        }
    }
}  

しかし、それは機能していません。例外があります:

OLE呼び出しを行う前に、現在のスレッドをシングルスレッドアパートメント(STA)モードに設定する必要があります。Main関数にSTAThreadAttributeがマークされていることを確認してください。

ライン上

if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Text)).

どうすればこれを解決できますか?

4

1 に答える 1

2

あなたの中であなたProgram.cs[STAThread]その方法に適用しましたMainか?

次のようになります。

[STAThread]
static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
}
于 2013-01-26T12:47:40.327 に答える