Requested Clipboard operation did not succeed的解決辦法


在使用Clipboard.SetText(strTar) 將文本復制進剪貼板的時候,有時候會導致Requested Clipboard operation did not succeed的異常,但有時候又不會。

原因:

       剪切板被所有進程共享,但是不能同時被兩個進程修改。所以,如果有兩個程序同時訪問剪貼板,就有可能導致異常的發生。即使電腦中其他的應用程序的窗口沒有處於激活狀態,它們也可能在后台訪問剪貼板,從未導致剪貼板訪問沖突。

解決方法:

        在捕獲到異常的時候,間隔一定的時間,再次嘗試對剪貼板進行操作。

        在.NET framework (2.0)和其以上的版本已經提供了一個方法Clipboard.SetDataObject(object data, bool copy, int retryTimes, intretryDelay) 用來解決這個問題。他會在訪問剪貼板沖突的時候,間隔一定的時間,嘗試訪問剪貼板。

方法的說明:

//
        // 摘要:
        //     嘗試指定的次數,以將數據置於系統剪貼板中,且兩次嘗試之間具有指定的延遲,可以選擇在退出應用程序后將數據保留在剪貼板中。
        //
        // 參數:
        //   data:
        //     要置於剪貼板中的數據。
        //
        //   copy:
        //     如果想在退出應用程序后將數據保留在剪貼板中,則為 true;否則為 false。
        //
        //   retryTimes:
        //     嘗試將數據置於剪貼板中的次數。
        //
        //   retryDelay:
        //     兩次嘗試之間暫停的毫秒數。
        //
        // 異常:
        //   System.Threading.ThreadStateException:
        //     當前線程未處於單線程單元 (STA) 模式下。請將 System.STAThreadAttribute 添加到應用程序的 Main 方法中。
        //
        //   System.ArgumentNullException:
        //     data 為 null。
        //
        //   System.ArgumentOutOfRangeException:
        //     retryTimes 小於零。- 或 -retryDelay 小於零。
        //
        //   System.Runtime.InteropServices.ExternalException:
        //     未能將數據置於剪貼板中。這種情況通常發生在剪貼板正在被其他進程使用的時候。
        public static void SetDataObject(object data, bool copy, int retryTimes, int retryDelay);

參考鏈接

ClipBoard.SetText Exception

Requested Clipboard operation did not succeed—MSDB Forums.

Requested Clipboard operation did not succeed—StackOverFlow


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM