在我的应用程序中,我创建了大量自定义控件,然后在不同的窗口中使用这些控件。我的项目结构如下所示:
我正在创建存储在 Controls 文件夹中的类(控件)。如果我想在控件中使用图像,我可以像这样访问它:
new Uri("../Resources/my_image.png", UriKind.Relative)
Run Code Online (Sandbox Code Playgroud)
有时,我想在多个窗口中使用相同的控件,有时这些窗口存储在不同的文件夹中。如果我使用存储在另一个文件夹中的 Window3 中的控件,则不会显示图像。
如果我将 Uri 更改为:(在路径中添加另一个“返回”命令)
new Uri("../../Resources/my_image.png", UriKind.Relative)
Run Code Online (Sandbox Code Playgroud)
图像在Window3 中显示,但在Window1 或Window2 中未显示。
有没有办法创建相对于主可执行文件而不是相对于显示控件的窗口的路径?
编辑:我忘了提到一个重要的部分。因为在启动这个应用程序时,我只是在学习如何使用 WPF,我搞砸了一件事。我的资源文件夹不在包含主要可执行文件的文件夹中。
我的文件结构如下所示:
我试图使用每个人都建议的路径:
new Uri("pack://application:,,,/../../my_image.png", UriKind.RelativeOrAbsolute)
Run Code Online (Sandbox Code Playgroud)
但我得到了例外:
找不到资源“my_image.png”。
我可以尝试重新定位 Resources 文件夹,但它会弄乱所有其他路径。有没有办法在“pack”uri中的文件夹结构中“返回”?如果没有,重新定位文件夹的最佳方法是什么,这样所有路径都不会被弄乱?
我在尝试使用 MongoDB .NET 客户端运行聚合管道时遇到问题。我的代码看起来像这样:
public async Task<IEnumerable<string>> GetPopularTags(int count)
{
var events = _database.GetCollection<Event>(_eventsCollectionName);
var agg = events.Aggregate();
var unwind = agg.Unwind<Event, Event>(e => e.Tags);
var group = unwind.Group(e => e.Tags, v => new { Tag = v.Key, Count = v.Count() });
var sort = group.SortByDescending(e => e.Count);
var project = group.Project(r => r.Tag);
var limit = project.Limit(count);
var result = await limit.SingleOrDefaultAsync();
return result;
}
Run Code Online (Sandbox Code Playgroud)
(每个阶段的单独变量仅用于调试目的)
在尝试获取管道结果(最后一个变量)时,出现以下错误:
System.InvalidCastException:无法将“MongoDB.Bson.BsonString”类型的对象转换为“MongoDB.Bson.BsonDocument”类型
我错过了什么?
在此先感谢您的帮助!
解决方案
我终于发现,我在最后一行出现异常与错误所在的位置无关。我尝试.SingleOrDefault()在每个阶段运行以查看输出,我注意到我的管道有几个问题。
我的展开阶段试图返回一个Event对象,但由于它是展开Tags属性(这是 …
我一直想知道巨大的应用程序(例如Facebook)是如何实时地通知用户事件(例如有人给你发消息),而不是每秒/分钟汇集数据库等等(我认为Facebook不会检查是否存在每秒登录用户的任何新消息).当数据库更改(插入或更新行)时,Sql Server中是否有任何方法可以在C#应用程序中接收通知?
(希望)让事情变得更加实用:
您将如何处理连接到数据库服务器的桌面聊天应用程序,并允许用户互相发送消息,为接收消息的人提供即时通知?
您如何处理通知用户他们在"离线"时收到的消息?
假设应用程序将处理数百/数千个用户,并且通知应该(相对)即时(没有每隔10秒汇集数据库以查看是否有任何新消息).