0

所以我有所有问题中最奇怪的。我只是想写一个简单的 c# WinForms 工具供个人使用时遇到它。我将从头开始,真正的问题将在最后。

所以我做了一个 NotifyIcon 应用程序。这很简单,我刚刚做了:

public class MyApp: ApplicationContext
{
    NotifyIcon icon;
    public MyApp()
    {
        // ...
    }

    // ...
}

并像所有其他 WinForms 应用程序一样启动该应用程序:

Application.Run(new MyApp());

现在我添加了一个新的 MyApp.Data 类项目,其中包含一个本地数据库,并使用 edmx 帮助程序来生成我的 EF 模型。我添加了一个名为 Database 的静态类,它应该包含我的所有查询。

public static class DataBase
{
    static MyAppModel db = new MyAppModel();

    public static void AddEntry(SomeThing st) 
    {
        db.SomeThings.AddObject(st);
        db.SaveChanges();
    }

    public static String[] GetSomeThings(int numberOfEntries)
    {
        return db.SomeThings.OrderBy(x => x.Date).Select(x => x.Title).Take(numberOfEntries).ToArray();
    }
}

回到 WinForms NotifyIcon 项目,我添加了 MyApp.Data 程序集(和 EF 程序集),当我调用时DataBase.AddEntry(x)一切正常,但是当我使用时Database.GetSomeThings(10)一切都中断了。

var x = Database.GetSomeThings(10);
String[] y = Database.GetSomeThings(10);

只是默默地失败而没有错误。x并且y两者都不会出现在当地人中,也无法观看。有人有想法吗?

编辑:我直接绑定到组合框,它神奇地起作用了。现在我打开了自动完成模式和源,我收到一条错误消息:

Für den aktuellen Thread muss der STA-Modus (Single Thread Apartment) festgelegt werden, bevor OLE-Aufrufe ausgeführt werden können。Stellen Sie sicher, dass die Hauptfunktion mit STAThreadAttribute gekennzeichnet ist。

不幸的是德语,但我想我可以解决这个问题:

http://msdn.microsoft.com/de-de/library/ms182351%28vs.80%29.aspx

4

1 回答 1

1

所以我认为这解决了这个问题(为应用程序创建一个起点,并且我把它做成了单例,其他一切都是愚蠢的恕我直言)。

    public static class Program
    {
        private static MyApp activeInstance;

        [STAThread]
        public static void Main()
        {
            if (activeInstance == null)
            {
                activeInstance = new MyApp();
                Application.Run(activeInstance);
            }
        }
    }

不过,如果有人知道我在这里做了什么,我将不胜感激。这些[ tags ]可能是我不理解的编程中的最后一件事。

于 2012-12-22T16:20:53.027 回答