2010-11-19 56 views
1

在KeyDown事件,我有:AccessViolationException在Silverlight中的KeyDown处理程序

if (e.Key == Key.Delete) 
{ 
    if (HtmlPage.Window.Confirm("r u sure?")) 
    { 
     //Do stuff.... 
    } 
} 

而且我得到这个错误“ 试图读取或写入保护内存这通常是指示其他内存已损坏。” @确认?如下图所示的解决方法,它被扔在错误的行为.Window.Confirm

Dispatcher.BeginInvoke(() => 
    { 
     if (e.Key == Key.Delete) 
     { 
      if (HtmlPage.Window.Confirm("r u sure?")) 
      { 
       //Do stuff.... 
      } 
     } 
    }); 

任何人都知道一个快速的解决方案:

编辑。

+2

你能隔离抛出这个异常的特定行吗?它是'if()'条件之一,还是在'// Do stuff'? – 2010-11-19 17:03:39

+0

我没有得到任何错误,使用你的确切例子。点击确认框中的按钮后,在确认框出现之前,何时出现错误?什么浏览器? – Gabe 2010-11-19 17:04:48

+1

从哪里来的解决方法?你是否试图在UI线程之外弹出一个确认对话框? – 2010-11-19 17:08:03

回答

1

尝试......

if (e.Key == Key.Delete) 
{ 
    Dispatcher.BeginInvoke(() => 
    { 
     if (HtmlPage.Window.Confirm("r u sure?")) 
     { 
      //Do stuff.... 
     } 
    } 
} 

MSDN相当能说明问题。当一个BackgroundWorker线程开始启动,然后尝试访问UIElement(如Button)时,通常会出现这种情况,您在此时也会获得AccessViolationException

+0

OP已经在他们的问题中发布了这个。回声Echo – Gabe 2010-11-19 17:23:07

+0

@gmcalab注意我的答案@ 18分钟,请注意编辑@ 16分钟这是当分派器参考浮出水面...没有回声... – 2010-11-19 17:28:46

+0

谢谢,我也想出了。你能简要解释为什么我们必须这样做吗? – VoodooChild 2010-11-19 17:28:51