0

Visual Studio 2005 を使用して、c#.net を使用して「Windows サービス」を開発しています。私のコードでは、MS Office クリップボードにアクセスする必要があります。ただし、Clipboard クラスにアクセスしようとすると、デバッガーがエラーをスローします。

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

ランタイム中。解決策を確認したところ、メイン メソッドの前に「[STAThread]」を追加することで解決できることがわかりました。しかし、これを追加すると、コンパイルエラーが発生します

「型または名前空間名 'STAThread' が見つかりませんでした (using ディレクティブまたはアセンブリ参照がありませんか?)」

現在のバージョンの .NET (.NET 3.0) でクリップボードにアクセスできますか?

主なメソッドは「program.cs」というタイトルのファイルにあり、ロジックは「Service.cs」というタイトルのファイルにあります。クリップボードは Service.cs によって使用されます。

/* Program.cs */

using System.Collections.Generic;
using System.ServiceProcess;
using System.Text;
using System.Media;
using System.Threading;
namespace WindowsService1
{    
    static class Program
    {
        [STAThread]
        static void Main(string[] args)
        {
#if DEBUG
            Service1 serv = new Service1();
            serv.onDebug();
            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);                    
#else
            ServiceBase[] ServicesToRun;            
            ServicesToRun = new ServiceBase[] { new Service1() };
            ServiceBase.Run(ServicesToRun);
#endif            
        }
    }
}

/* Service.cs */

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.ServiceProcess;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Timers;
namespace WindowsService1
{
    public partial class Service1 : ServiceBase
    {        
        public Service1()
        {
            InitializeComponent();            
        }        
        public void onDebug()
        {            
            OnStart(null);
        }
        protected override void OnStart(string[] args)
        {                    
            clear_cb();                        
        }
        protected void clear_cb()
        {                     
            Clipboard.Clear();   // This is the line where I get the exception          
        }                
        protected override void OnStop()
        {
            // TODO: To clear the back up Database            
        }
    }
}
4

0 に答える 0