我正在使用WPF NotifyIcon来创建系统托盘服务.当我显示一个消息框时,它会显示半秒钟然后立即消失而不等待输入.
之前发生过这种情况,通常的建议是使用接受Window参数的重载.但是,作为系统托盘服务,没有窗口可用作父级,并且null不会在其位置接受.
有没有办法让MessageBox等待用户输入自己创建一个自定义MessageBox窗口?
StackExchange.Redis中是否有任何功能允许您直接执行原始命令?就像我提供一个带有命令的字符串,例如(下面的假设代码):
conn.Send("ZADD mysortedset 1 john");
Run Code Online (Sandbox Code Playgroud)
我知道几乎每个命令都有可用的方法ZADD,但这不是重点.
在ASP .NET 5中,配置正在发生巨大变化.我们不再有web.config文件了.相反,我们可以使用JSON和其他选项,具体取决于我们在Startup课堂上设置的方式.不同的是web.config,此类配置通常不会进入wwwroot,并且客户端无法访问它.
然而,在ASP .NET 5项目模板中,有一个包含以下内容的web.config文件wwwroot:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
</handlers>
<httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
在我看来,这可能是托管服务器在运行时寻找的东西,独立于应用程序配置.
任何人都可以阐明为什么需要它,以及它是如何工作的?
我正在尝试使用Reactive Extensions(Rx).这是我做的一个小例子:
var query = from number in Enumerable.Range(1, 20) select number;
var obs = query.ToObservable(Scheduler.ThreadPool);
obs.Subscribe(Console.WriteLine);
Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)
当我使用Scheduler.ThreadPool,Scheduler.NewThread等,我得到这个警告:
System.Reactive.Concurrency.Scheduler.ThreadPool'已过时:'由于重构API表面和消除特定于平台的依赖项,不再支持此属性.考虑使用Scheduler.Default获取平台最合适的基于池的调度程序.要访问特定的基于池的调度程序,请为目标平台添加对System.Reactive.PlatformServices程序集的引用,并在System.Reactive.Concurrency命名空间中使用相应的调度程序.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=260866.
如果我按照警告的说明操作,我仍会收到警告.如果我想使用以前通过Scheduler类提供的各种选项,我期望准确地用于调度程序的是什么?
听起来很简单?我有一个TreeView,我希望在扩展其中一个节点时发生一些事情.我正在使用MVVM,因此'something'是ViewModel中的命令.
好吧,我发现它毕竟不是那么简单.我环顾四周,尝试了一些事情.例如,使用MVVM Light的EventToCommand:
<i:Interaction.Triggers>
<i:EventTrigger EventName="TreeViewItem.Expanded">
<cmd:EventToCommand Command="{Binding Path=FolderNodeToggledCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
此代码(基于此和此)不起作用(没有触发;命令绑定在ViewModel中,但在展开节点时永远不会触发相应的方法).我也试过替换cmd:EventToCommand,i:InvokeCommandAction结果是一样的.第二个链接中的"解决方案"显然有点过分,我不想更改ToggleButton,因为我想使用具有自己的ToggleButton 的WPF TreeView WinForms Style.第二个链接中的第二个答案表明我可能正在尝试在TreeView上使用不存在的事件.
另一种可能的解决方案是绑定TreeViewItem的IsExpanded属性.但是我想将我绑定的对象保持为干净的DTO并在ViewModel中执行操作,而不是在绑定的对象中执行.
那么当TreeViewItem扩展时,如何在ViewModel中调用命令呢?
我正在尝试使用基本格式的RichTextBox为我的新测试笔记软件Lilly Notes工作.Brian Lagunas关于这个问题的文章让我朝着正确的方向前进,但是我遇到了一些问题.如果单击带下划线的文本,则会按下"下划线"按钮,因此正在识别状态.但是,如果我将其序列化为RTF然后将其反序列化为RichTextBox,则不会检测到它.由于Lilly Notes中的代码在这里展示并不容易,我创建了一个SSCCE来演示这个问题.
首先,MainWindow.xaml:
<Window x:Class="WpfRichTextBoxUnderline.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow"
Height="350"
Width="525">
<DockPanel LastChildFill="True">
<Button Name="SaveAndReloadButton"
Content="Save and Reload"
DockPanel.Dock="Bottom"
Click="SaveAndReloadButton_Click" />
<ToggleButton Name="UnderlineButton"
DockPanel.Dock="Top"
Width="20"
Command="{x:Static EditingCommands.ToggleUnderline}"
CommandTarget="{Binding ElementName=RichText}">
<ToggleButton.Content>
<TextBlock Text="U"
TextDecorations="Underline" />
</ToggleButton.Content>
</ToggleButton>
<RichTextBox Name="RichText"
SelectionChanged="RichTextBox_SelectionChanged" />
</DockPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
这就是它的样子:

在代码隐藏中,我有代码来检测选择更改时的格式状态,并相应地更新下划线按钮的状态.这与Brian Lagunas的方法没什么不同.
private void RichTextBox_SelectionChanged(object sender, RoutedEventArgs e)
{
if (this.RichText.Selection != null)
{
object currentValue = this.RichText.Selection.GetPropertyValue(Inline.TextDecorationsProperty);
this.UnderlineButton.IsChecked = (currentValue == DependencyProperty.UnsetValue) ? false : currentValue != …Run Code Online (Sandbox Code Playgroud) 在这个阶段,我很确定 Redis 在操作系统上需要一定数量的空闲内存才能运行。在过去的几周里,我看到 Redis (Linux) 内存不足,但仍有几 GB 的可用内存,而在 Windows 上,当您在系统上使用大量内存时,它拒绝启动,但仍然有一堆空闲,如下面的屏幕截图所示。

Windows 上的错误提示了为什么会发生这种情况(虽然我不假设它在 Linux 上是一样的)。但是,我的问题更笼统。Redis 需要多少空闲内存才能运行?
我正在使用Visual Studio 2015,当我遇到断点时,我无法获得有关变量值的任何信息.
在立即窗口或手表中,我得到:
error CS0648: '' is a type not supported by the language
Run Code Online (Sandbox Code Playgroud)这种情况突然发生,因为它曾经工作到昨天.
我尝试了一些方法,包括重置所有用户设置,删除*.user文件,重新启动Visual Studio,甚至重新启动Windows.
我还能尝试什么?
我已经阅读了很多关于如何使用ExpandoObject通过添加属性从头开始动态创建对象的内容,但我还没有发现你是如何从已经拥有的非动态C#对象开始做同样的事情的.
例如,我有这个琐碎的课程:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
public string Telephone { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想将它转换为ExpandoObject,以便我可以根据已经的内容添加或删除属性,而不是从头开始重建相同的东西.这可能吗?
编辑:标记为重复的问题显然不是这个问题的重复.
c# ×7
wpf ×4
redis ×2
.net ×1
asp.net-core ×1
debugging ×1
dynamic ×1
memory ×1
messagebox ×1
mvvm ×1
notifyicon ×1
richtextbox ×1
rtf ×1
scheduler ×1
styles ×1
treeview ×1
treeviewitem ×1
web-config ×1