所以我正在使用实体框架,c#和Azure创建一个简单的消息传递应用程序。这是我的架构。
public class UserContext : DbContext {
public UserContext() : base("name=Official") {
}
public DbSet<User> Users { get; set; }
public DbSet<Message> Messages { get; set; }
}
public class User {
[Key]
public string username { get; set; }
public string password { get; set; }
//public int test { get; set; }
public virtual ICollection<User> friends { get; set; }
public virtual ICollection<Message> SentMessages { get; set; }
public virtual ICollection<Message> ReceivedMessages { get; set; }
public static implicit operator User(bool v) {
throw new NotImplementedException();
}
public override string ToString() {
return username;
}
}
public class Message {
[Key]
public int ID { get; set; }
public virtual User sender { get; set; }
public virtual User recipient { get; set; }
public virtual Group group { get; set; }
public string content { get; set; }
public int TimeSent { get; set; }
}
public class Group {
[Key]
public int ID { get; set; }
public virtual ICollection<User> members { get; set; }
public virtual ICollection<Message> messages { get; set; }
}
我的DB在UniversalStuff类中声明一次,我在整个程序中随处访问它。
public static UserContext db = new UserContext();
所以我有一个基本上是主屏幕的Conversations Form,它看起来像这样:
我遇到的问题是找到更新程序的方法,以便在程序运行时发送给您的新邮件显示在右侧的文本框中。
我&#34;解决了#34;每次用户更改右侧列表框中的选定项目(甚至点击空格)时,都会通过处理和重新创建数据库对象来实现它。显然,这不是最好的方法,现在我想实现系统托盘通知,所以如果程序最小化到任务栏,你可以看到你是否收到了新的通知。
现在,关于这个问题: 如果用户不必做任何事情,最好的方法是弹出新消息?
答案 0 :(得分:2)
您可以使用计时器https://msdn.microsoft.com/en-us/library/system.windows.forms.timer(v=vs.110).aspx https://docs.microsoft.com/en-us/dotnet/framework/winforms/controls/timer-component-windows-forms
根据您选择的时间间隔计时器,您可以检查数据库并获取最新记录并显示它。
示例:https://stackoverflow.com/a/23137100/20126
您也可以使用与我不兼容的SqlDependency https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/detecting-changes-with-sqldependency(可能就在我的情况下,我正在处理)。