小编Phi*_*hil的帖子

查询本地IP地址

我需要从Windows 8 WinRT/Metro应用程序知道我的实际本地IP地址(即不是环回地址).我需要这几个原因.最简单的是,在应用程序的UI中,我想显示一些文本,例如"您的本地网络IP地址是:[从代码查询的IP]".

我们还使用该地址进行一些额外的网络通信.这些通信是完全有效的,因为如果我查看控制面板中的IP地址,然后将其硬编码到应用程序中,这一切都有效.在对话框中询问用户去查看地址并手动输入它是我真正想要避免的.

我认为以编程方式获取地址并不是一项复杂的任务,但我的搜索引擎和StackOverflow技能空洞.

在这一点上,我开始考虑做一个UDP广播/监听循环来听取我自己的请求并从中提取地址,但这看起来真的像一个hackey kludge.在WinRT的新东西中是否有一个API可以让我在那里?

请注意,我说"WinRT应用程序.这意味着典型的机制喜欢Dns.GetHostEntryNetworkInterface.GetAllInterfaces()不会工作.

c# windows-runtime

31
推荐指数
1
解决办法
9997
查看次数

将回车添加到字符串

我有一根长串.

string s1 = "'99024','99050','99070','99143','99173','99191','99201','99202','99203','99204','99211','99212','99213','99214','99215','99217','99218','99219','99221','99222','99231','99232','99238','99239','99356','99357','99371','99374','99381','99382','99383','99384','99385','99386','99391','99392'";
Run Code Online (Sandbox Code Playgroud)

我想要

string s2 = 
            "'99024',
             '99050',
             '99070',
             '99143',
             '99173',
             '99191',
             '99201',
             '99202',....";
Run Code Online (Sandbox Code Playgroud)

换一种说法.也许它喜欢:

string s2 = "'99024',"+'\n'+"'99050',"+'\n'+"'99070',"+'\n'+"'99143',"+'\n'+.....;
Run Code Online (Sandbox Code Playgroud)

我需要一个简洁的代码.也许是LINQ.谢谢.

c# linq

23
推荐指数
2
解决办法
11万
查看次数

MVVM - 用户控制相互通信的理想方式是什么

我有一个用户控件,其中包含其他几个用户控件.我正在使用MVVM.每个用户控件都有一个相应的VM.这些用户控件如何相互发送信息?我想避免在后面的xaml代码中编写任何代码.特别是我对控件(主用户控件内部)如何相互通信以及如何与容器用户控件进行通信感兴趣.

编辑:我知道使用事件代表将帮助我解决这个问题.但是,我想避免在xaml代码隐藏中编写任何代码.

c# wpf user-controls mvvm

14
推荐指数
3
解决办法
9005
查看次数

当绑定值更改时,突出显示WPF DataGrid中的单元格

我有一个DataGrid,它的数据每15秒由后台进程刷新一次.如果任何数据发生变化,我想运行一个动画,突出显示黄色更改值的单元格,然后淡出为白色.我通过以下方式让它工作:

我在Binding.TargetUpdated上创建了一个带有事件触发器的样式

<Style x:Key="ChangedCellStyle" TargetType="DataGridCell">
    <Style.Triggers>
        <EventTrigger RoutedEvent="Binding.TargetUpdated">
            <BeginStoryboard>
                <Storyboard>
                    <ColorAnimation Duration="00:00:15"
                        Storyboard.TargetProperty=
                            "(DataGridCell.Background).(SolidColorBrush.Color)" 
                        From="Yellow" To="Transparent" />
                </Storyboard>
            </BeginStoryboard>
        </EventTrigger>
    </Style.Triggers>
</Style>
Run Code Online (Sandbox Code Playgroud)

然后将其应用于我想要突出显示值的列

<DataGridTextColumn Header="Status" 
    Binding="{Binding Path=Status, NotifyOnTargetUpdated=True}" 
    CellStyle="{StaticResource ChangedCellStyle}" />
Run Code Online (Sandbox Code Playgroud)

如果数据库中状态字段的值发生更改,则单元格将以黄色突出显示,就像我想要的那样.但是,有一些问题.

首先,当最初加载数据网格时,整个列以黄色突出显示.这是有道理的,因为所有的值都是第一次加载,因此您可能希望触发TargetUpdated.我确信有一些方法可以阻止这一点,但这是一个相对较小的一点.

真正的问题是如果以任何方式对网格进行排序或过滤,整个列将以黄色突出显示.我想我不明白为什么排序会导致TargetUpdated触发,因为数据没有改变,只是它的显示方式.

所以我的问题是(1)如何在初始加载和排序/过滤时停止这种行为,以及(2)我是否在正确的轨道上,这是一个很好的方法吗?我应该提到这是MVVM.

wpf datagrid mvvm storyboard

13
推荐指数
1
解决办法
3704
查看次数

随机错误:尝试读取或写入受保护的内存

我们有一个使用WCF服务的C#.Net应用程序.该应用程序部署在Windows服务应用程序下的生产服务器中.该模块的一部分负责创建形状文件((*.shp,*.dbf),用于工作人员今天工作的较小区域,并将其发送到PDA.

要编写形状文件,我们使用第三方DLL NetTopologySuite

GisSharpBlog.NetTopologySuite.IO.ShapefileWriter
Run Code Online (Sandbox Code Playgroud)

这也是在C#中.(我不确定它引用的任何dll是否使用非托管代码.) 系统可能会工作一段时间再说一个星期.突然间我们得到一个例外说法

Attempted to read or write protected memory. 
This is often an indication that other memory is corrupt.
Run Code Online (Sandbox Code Playgroud)

从Write方法,我们将几何集合写入形状文件.

sfw.Write(FileName, new GeometryCollection(gc.ToArray()));
Run Code Online (Sandbox Code Playgroud)

(GeometryCollection也来自第三方dll,GeoAPI.dll)

此错误会导致整个服务失效并使其无法正常运行.然后我们只是重新启动服务并尝试再次运行相同的数据,它将再工作一周,直到它再次崩溃.它只发生在生产中和随机时间.我们无法找到问题的原因.

许多论坛都认为这可能是因为某些非托管代码中的内存泄漏.但我们找不到哪一个.

我们也准备重写创建新形状文件的部分.请帮我解决这个问题.如果需要更多详细信息,请与我们联系.提前致谢.

c# memory-leaks shapefile geoapi sharpmap

11
推荐指数
1
解决办法
3624
查看次数

WPF DataGrid:将DataGridColumn绑定到ContextMenu MenuItems IsChecked(MVVM)

我想通过右键单击列标题来控制用户可用的DataGrid列可见性ContextMenu.将ContextMenu显示所有可用的列的名称.我正在使用MVVM设计模式.

我的问题是:如何将绑定DataGridColumnVisibility属性设置IsChecked的属性MenuItem地处ContextMenu.

一些模型代码:

<UserControl.Resources>         
    <ContextMenu x:Key="ColumnHeaderContextMenu">  
        <MenuItem Header="Menu Item..1" IsCheckable="True" />  
    </ContextMenu>  
    <Style x:Key="ColumnHeaderStyle" 
           TargetType="{x:Type toolkit:DataGridColumnHeader}">  
        <Setter Property="ContextMenu" 
                Value="{StaticResource ColumnHeaderContextMenu}" />  
    </Style>  
    <BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />  
</UserControl.Resources>  
Run Code Online (Sandbox Code Playgroud)

... flaf flaf flaf

<toolkit:DataGrid x:Name="MyGrid" AutoGenerateColumns="False" 
    ItemsSource="{Binding MyCollection, Mode=Default}" 
    EnableColumnVirtualization="True" IsReadOnly="True" 
    ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}">  
    <toolkit:DataGrid.Columns>  
        <toolkit:DataGridTextColumn Binding="{Binding Path=MyEntry}" 
            Header="MyEntry" Visibility="{Binding IsChecked, Converter=
                {StaticResource booleanToVisibilityConverter}.... />
    </toolkit:DataGrid.Columns>     
</toolkit:DataGrid>  
Run Code Online (Sandbox Code Playgroud)

如果我不清楚请告诉我,我会尝试详细说明.

干杯,

wpf xaml binding datagrid mvvm

8
推荐指数
3
解决办法
2万
查看次数

如何设计ViewModel

我在项目中实施了EF 4.在其中,有表客户和订单.其中一个(客户)与多个(订单)有关系.

我正在为(CustomerViewModel和OrderViewModel)创建一个viewmodel,从我的域层传递到接口层(在本例中为MVC).

现在的问题是"我需要在customerviewmodel同时引用视图模型?例如已经IEnumerable<OrderViewModel>在orderviewmodel已CustomerViewModel.如果让我怎么设计它(作为最佳实践),以便IEnumerable<OrderViewModel>CustomerViewModel填充了正确的参考?

entity-framework viewmodel

8
推荐指数
1
解决办法
2万
查看次数

我如何在sql中的123456数字中获得前3位数字?

我在我的CDR表中有一个名为CallingParty的字段,它包含这样的数据

CallingParty

267672668788

我想选择每个数字的前3个数字

CallingParty

267

sql t-sql sql-server-2000

8
推荐指数
1
解决办法
7万
查看次数

在VSTS中进行构建时,如何设置csc langversion?

我有一个简单的测试控制台应用程序。它唯一的代码是

public class Class1
{
    private protected int _value = 0b_1001_0110;
}
Run Code Online (Sandbox Code Playgroud)

这只是测试这些C#7.2功能是否可以构建。

在Visual Studio 2017 15.5.2中,如果我这样设置语言版本,它们可以正常构建

高级构建设置

如果我现在将项目检入VSTS并运行构建,它将失败,并显示各种错误,例如

Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,17):错误CS0107:多个保护修饰符
Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS1013:无效的数字

因为它对C#7一无所知。

如果我现在添加“ Microsoft.NET.Compilers 2.6.1” NuGet软件包并对其进行重建,则该软件包在本地可以正常运行,但在VSTS中使用

Test \ CSharp72Test \ CSharp72Test \ Class1.cs(7,40):错误CS8107:功能“前导数字分隔符”在C#7.0中不可用。请使用7.2版或更高版本的语言。

现在使用的是正确版本的CSC.exe,但未传递/ langversion:latest。

在多项目解决方案中,如何在每个项目中正确传递此信息

c# tfs csc azure-devops azure-pipelines

8
推荐指数
1
解决办法
2712
查看次数

在Win 7上更改程序的音量

我想更改程序的音量(而不是音量).我现在有以下代码:

DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);

private void volumeBar_Scroll(object sender, EventArgs e)
{
    // Calculate the volume that's being set
    int NewVolume = ((ushort.MaxValue / 10) * volumeBar.Value);
    // Set the same volume for both the left and the right channels
    uint NewVolumeAllChannels = (((uint)NewVolume & 0x0000ffff) | ((uint)NewVolume << 16));
    // Set the volume
    waveOutSetVolume(IntPtr.Zero, NewVolumeAllChannels);
}
Run Code Online (Sandbox Code Playgroud)

这仅适用于Win XP,而不适用于Windows 7(也可能不适用于Vista).我没有找到任何可以在Win 7上实现相同的脚本,只是为了更改主卷(我不会追求).

c# pinvoke winmm

7
推荐指数
1
解决办法
6640
查看次数