C# 学习笔记-多线程操作、异常排除

多线程操作、异常排除

  • 1.异常解决
    • 1.1 关于创建调用提示非单线程的问题
    • 2.关于无法捕获的异常
      • 2.1 AccessViolationException异常

1.异常解决

1.1 关于创建调用提示非单线程的问题

调试过程中,创建多线程调用Excel时提示:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式。请确保您的 Main 函数带有 STAThreadAttribute 标记

解决方法是,设置线程属性为单线程:

Thread threadPrintLayout = new Thread(new ParameterizedThreadStart(ThreadPrintLayout));
//设置单元状态
threadPrintLayout.SetApartmentState(ApartmentState.STA);

threadPrintLayout.Start(layout);

2.关于无法捕获的异常

2.1 AccessViolationException异常

当代码尝试读取或写入尚未分配或无法访问的内存时,非托管或不安全代码中会发生访问冲突,并报AccessViolationException错误。如果异常发生在公共语言运行库保留的内存之外,则公共语言运行库抛出的AccessViolationException异常不会由catch结构化异常处理程序中的语句处理,需要在方法前添加HandleProcessCorruptedStateExceptionsAttribute特性,需要添加System.Runtime.ExceptionServices引用。

using System.Runtime.ExceptionServices;

        /// 
        /// cmb_Items selection changed.
        /// 
        /// 
        /// 
        [HandleProcessCorruptedStateExceptionsAttribute]
        private void Cmb_Items_SelectionChanged(object sender, SelectionChangedEventArgs e)

你可能感兴趣的:(C#,c#,多线程)