CheckForIllegalCrossThreadCalls = false;

 

어디까지나 임시방편 


결국에는 invoke 또는  BackgroundWorker를 사용해서 수정해야함.

오픈소스 사용함

 

URL: https://github.com/Enichan/Ini

 

GitHub - Enichan/Ini: Ini file reader/writer for C# / .NET written in pure .NET in a single source file

Ini file reader/writer for C# / .NET written in pure .NET in a single source file - GitHub - Enichan/Ini: Ini file reader/writer for C# / .NET written in pure .NET in a single source file

github.com

 

 

Ini.cs
0.03MB

 

Kernel32를 사용하지 않고 cs파일 하나만 추가해서 매우 간단하고 직관적으로 코딩할수 있다.

 

 

            // ini 쓰기
            IniFile ini = new IniFile();
            ini["Setting"]["USE_FLAG"] = "true";
            ini["Setting"]["Delay_Time"] = "10";
            ini["INPUT_DATA"]["TEXT1"] = "DATA1";
            ini.Save("C:\\Setting.ini");
 
            // ini 읽기
            ini.Load("C:\\Setting.ini");
            string useflag = ini["Setting"]["USE_FLAG"].ToString();
            string delay_time = ini["Setting"]["Delay_Time"].ToString();
            string textdata1 = ini["INPUT_DATA"]["TEXT1"].ToString();

 

진짜 많이 검색해보고 나름대로 가장 심플하면서 확실한 방법을 찾은거같아서 글을 작성합니다.

 

그냥 Excel.EXE 프로세스를 죽이게 되면 다른 실행되있는 엑셀파일도 전부 날아가기때문에

 

엑셀의 PID(Process ID)를 획득 후 해당 ID에 대해서만 Kill하게 됩니다.

 

예제)

    class Program
    {
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);

        static void Main(string[] args)
        {
            Microsoft.Office.Interop.Excel.Application excel = null;
            Workbook workbook = null;
            Worksheet worksheet = null;
            uint processId = 0;

            excel = new Microsoft.Office.Interop.Excel.Application();
            // 엑셀 내용 Start
                      º
                      º
                      º  
                      º
                      º
            // 엑셀 내용 End
            
            GetWindowThreadProcessId(new IntPtr(excel.Hwnd), out processId); //PID 획득
            workbook .Save();       
            workbook.Close(Type.Missing, Type.Missing, Type.Missing);     
            excel.Quit();

            if (processId != 0)
            {
                System.Diagnostics.Process excelProcess = System.Diagnostics.Process.GetProcessById((int)processId);
                excelProcess.CloseMainWindow();
                excelProcess.Refresh();
                excelProcess.Kill();
            }
        }
    }

 

'Programing > C#' 카테고리의 다른 글

C# 디버깅시 Cross Thread 임시 해결방법  (0) 2022.05.09
C# ini 파일 읽기 쓰기  (0) 2022.04.22
C# Excel 프로세스 해제  (0) 2022.03.12
C# LOG파일 생성  (0) 2022.03.12
C# CrossThread Error 해결  (0) 2022.02.21

+ Recent posts