C# - 似乎无法弄清楚如何从program.cs打开2个表单并连接sqlite数据库

时间:2017-08-02 20:49:06

标签: c# winforms entity-framework sqlite

所以,我已经在我的应用程序上编写了导入/导出功能,并且我已经设置了与我的应用程序相关联的文件扩展名。导出提醒时,会创建.remindme文件。这可以打开,并在我的program.cs中捕获,如此

        [STAThread]
        [HandleProcessCorruptedStateExceptions]
        static void Main(string[] args)
        {                       
            using (Mutex mutex = new Mutex(false, "Global\\" + "RemindMe"))
            {
                if (!mutex.WaitOne(0, false))
                {
                    if (args.Length > 0)
                    {//The user double-clicked an .remindme file while remindme is running!   

                        Application.EnableVisualStyles();
                        Application.SetCompatibleTextRenderingDefault(false);
                        Application.Run(new Import(args[0]));
                    }
                    //one instance of remindme already running                                        
                    return;
                }

                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);                
                Application.Run(new Form1());
            }    
        }

我尝试在这里制作一个新的导入实例(一个Windows窗体),然后执行Import.Show(),但这不起作用。我在这个地方搜索过,我发现的唯一一件事就是在表格上使用Application.Run()。这确实启动了它,但它创建了我的应用程序的另一个实例。这会带来问题,包括无法使用数据库。

当我在应用程序运行时双击.remindme文件时,使用第二个Application.Run()表单成功启动。

enter image description here

但是,当我按yes(尝试将数据插入数据库)时,它会抛出EntityException

enter image description here

full stacktrace on pastebin

经过一番挖掘,我发现我不能使用同一个SQLite数据库的两个实例。这个新表单计为新实例,因为我使用了Application.Run

因此,总而言之我正在寻找的是一种从program.cs启动新表单的方法(因为我抓住了双击a .remindme文件)

1 个答案:

答案 0 :(得分:0)

经过大量搜索,我找到了一个发送Windows进程消息的解决方案,它运行良好!

我使用示例here

开始工作