2013-10-01 1 views
6

У меня есть одна из самых странных ошибок, которые я когда-либо видел.Учет буфера обмена. Очистить() Outlook и Visual Studio

Посмотрите на это Windows Forms приложение, созданное с нуля:

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 
} 

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

    private void button1_Click(object sender, EventArgs e) 
    { 
     System.Windows.Forms.Clipboard.Clear(); 
    } 
} 

Ничего особенного, просто очистка буфера обмена, когда кнопка нажата.

Теперь, если я запустил это в Debug из Visual Studio, несколько раз очистите буфер обмена, затем закройте приложение, затем попытайтесь закрыть Visual Studio, сбой в Visual Studio с исключением «Повреждение памяти». Это не происходит в 100% случаев, но когда это происходит, я больше не могу запускать Visual Studio, мне нужно перезагрузиться.

Это, похоже, также влияет на Outlook. Если у меня открыт Outlook, запустите это приложение, несколько раз очистите буфер обмена, затем вернитесь в Outlook, затем Outlook также выйдет из строя, и, как и Visual Studio, я должен перезагрузиться, чтобы снова использовать его.

Так что я начинаю очень подозревать, что класс Windows Forms Clipboard делает в методе Clear(). Чтобы подтвердить свою теорию, я использовал класс Clipboard, который поставляется с WPF. я ссылка PresentationCore.dll в моем приложении WinForms, и заменить:

System.Windows.Forms.Clipboard.Clear(); 

с

System.Windows.Clipboard.Clear(); 

И теперь ни Visual Studio, ни перспективы аварий.

Я немного искал эту информацию и нашел this post без ясного решения проблемы.

Итак, я думаю, мой вопрос в том, является ли это настоящей ошибкой в ​​классе WinForms Clipboard, или я чего-то не хватает?


Дополнительная информация:

  • Visual Studio 2012
  • Проект работает под .NET 4.0.
  • Перспективы 2010

Перспективы аварии стеком вызовов:

Unhandled exception at 0x77a7e3be in OUTLOOK.EXE: 0xC0000005: 
Access violation reading location 0x5c83d763. 

[email protected]@8() + 0x2c bytes  
[email protected]() + 0x7e bytes 
[email protected]() + 0x14 bytes 
mshtml.dll!ParseExpandProperty() + 0x2d6 bytes 
mshtml.dll!PROPERTYDESC::HandleStyleComponentProperty() - 0xc2707 bytes  
mshtml.dll!MSCSSParser::SetStyleProperty() + 0x268 bytes 
mshtml.dll!MSCSSParser::Declaration() + 0x95 bytes 
mshtml.dll!MSCSSParser::Write() + 0x8b0 bytes 
mshtml.dll!BaseCSSParser::LoadFromStream() + 0x15a bytes 
mshtml.dll!CStyleSheet::DoParsing() + 0x18b bytes 
mshtml.dll!CStyleElementHelper::OnDwnChan() + 0x315 bytes 
mshtml.dll!CStyleElementHelper::SetCssCtx() - 0x130a5f bytes 
mshtml.dll!CStyleElementHelper::EnsureStyleDownload() + 0xfd bytes 
mshtml.dll!CStyleElementHelper::AttachExternalStyleSheet() + 0x97 bytes  
mshtml.dll!CLinkElement::HandleLinkedObjects() + 0xf0 bytes  
mshtml.dll!CLinkElement::Notify() - 0x189c54 bytes 
mshtml.dll!CHtmRootParseCtx::FlushNotifications() + 0x134 bytes  
mshtml.dll!CHtmRootParseCtx::Commit() + 0xb bytes 
mshtml.dll!CHtmParse::Commit() + 0x3c bytes  
mshtml.dll!CHtmPost::Broadcast() + 0xf bytes 
mshtml.dll!CHtmPost::Exec() + 0x11c bytes 
mshtml.dll!CHtmPost::Run() + 0x40 bytes  
mshtml.dll!PostManExecute() + 0x8e bytes 
mshtml.dll!PostManResume() + 0x96 bytes  
mshtml.dll!CHtmPost::OnDwnChanCallback() + 0x10 bytes 
mshtml.dll!CDwnChan::OnMethodCall() + 0x1f bytes 
mshtml.dll!GlobalWndOnMethodCall() + 0xf8 bytes  
mshtml.dll!GlobalWndProc() + 0x4517a bytes 
+0

Вскоре после использования «System.Windows.Forms.Clipboard.Clear();» explorer.exe случайно сбой, и для меня это mmc.exe. –

ответ

3

Это known bug, что приводит к повреждению памяти на 64 бита машин. Это фиксируется в Windows 8.

Обходной состоит в выполнении

Clipboard.SetText(""); 
+0

это тоже вызывает исключение, если null не допускается, небольшое изменение в этом (одно пространство) помогло. Clipboard.SetText (""); – Menol

1

в .NET 4.0 код не достаточно. произошло исключение.

Clipboard.SetText(""); 

используйте этот код ..

Clipboard.SetDataObject("", false); 
0

Мне удалось решить эту проблему, только вернув проект в .NET 3.5 из .NET 4.0.

 Смежные вопросы

  • Нет связанных вопросов^_^