0

これが私が得ているエラーです:

タイプ 'System.Threading.ThreadStateException' の例外が System.Windows.Forms.dll で発生しましたが、ユーザー コードで処理されませんでした

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

内のクリップボードに値を割り当てようとしていますTask。コードを実行すると、上記のエラーが発生します。

クリップボードのコードは次のとおりです。

static public class ClipBoard
    {
        static private string _data = string.Empty;
        static public Semaphore ClipBoardSemaphore = new Semaphore(1, 1);

        static public void SetData(string data)
        {
            Clipboard.Clear();  //error here
            Clipboard.SetDataObject(data, true);
            _data = data;
        }

        static public string GetData()
        {
            return _data;
        }
    } 

ご覧のとおり、クリップボードがクリアされるとエラーが発生します。Task を呼び出すコードは次のとおりです。

for (int i = 0; i < zom.Count; i++)
{
     Task t = Task.Factory.StartNew(zom[i].Process);
     t.Wait();
}
4

1 に答える 1

3

クリップボードには、STA スレッド (通常は UI スレッド) からのみアクセスできます。そのため、クリップボードで何かを行うには、UI スレッドまたは別の STA スレッドを呼び出す必要があります。

于 2013-05-23T03:24:45.057 に答える