小编Oli*_*Oli的帖子

仅将唯一项添加到列表

我正在通过网络宣布自己将远程设备添加到列表中.我只想将设备添加到列表中,如果之前没有添加过的话.

公告是通过异步套接字侦听器进行的,因此添加设备的代码可以在多个线程上运行.我不确定我做错了什么但没有我尝试的东西我最终得到重复.这是我现在拥有的......

lock (_remoteDevicesLock)
{
    RemoteDevice rDevice = (from d in _remoteDevices
                            where d.UUID.Trim().Equals(notifyMessage.UUID.Trim(), StringComparison.OrdinalIgnoreCase)
                            select d).FirstOrDefault();
     if (rDevice != null)
     {
         //Update Device.....
     }
     else
     {
         //Create A New Remote Device
         rDevice = new RemoteDevice(notifyMessage.UUID);
         _remoteDevices.Add(rDevice);
     }
}
Run Code Online (Sandbox Code Playgroud)

.net c# c#-4.0

70
推荐指数
3
解决办法
10万
查看次数

列表/组合框背景和选定的颜色.net 4.5

我有一个应用程序在Windows 7及以下目标.net 4框架上运行愉快.
如果应用程序现在安装在Windows 8(运行.net 4.5但仍然以.net 4为目标)中,则会显示列表框或组合框中所选项目的蓝色背景以及焦点项目的白色背景.反正有没有删除它?
我在我的XAML中使用以下内容来设置有问题的样式,它似乎在Windows 8之前解决了这个问题.

<ListBox.ItemContainerStyle>
                <Style TargetType="{x:Type ListBoxItem}">
                    <Setter Property="FocusVisualStyle" Value="{x:Null}"/>
                    <Style.Resources>
                        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                    </Style.Resources>
                </Style>
            </ListBox.ItemContainerStyle>
Run Code Online (Sandbox Code Playgroud)

.net wpf windows-8

13
推荐指数
2
解决办法
4193
查看次数

如何跟踪异步/等待任务是否正在运行

我正在尝试从基于事件的异步模式转换,我使用唯一的id和asynoperationmanager跟踪运行方法.
由于现在已从Windows 8应用程序中删除,我试图获得与Async/Await类似的效果,但无法弄清楚如何.
我想要实现的是类似的东西

private async Task updateSomething()
{
    if(***the method is already running***)
    {
        runagain = true;
    }
    else
    {
        await someMethod();
        if (runagain)
        {
            run the method again
        }            
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在努力的部分是找出方法是否正在运行.我已经尝试创建一个Task并查看as和异步方法的.status的状态,但它们看起来并不正确.谢谢

更新:这是我在.net 4中使用的当前代码,以实现相同的结果._updateMetaDataAsync是基于事件的异步模式的类.

private void updateMetaData()
    {
        if (_updateMetaDataAsync.IsTaskRunning(_updateMetaDataGuid_CheckAllFiles))
        {
            _updateMetaDataGuid_CheckAllFiles_Again = true;
        }
        else
        {
            _updateMetaDataGuid_CheckAllFiles_Again = false;
            _updateMetaDataAsync.UpdateMetaDataAsync(_updateMetaDataGuid_CheckAllFiles);
        }
    }

private void updateMetaDataCompleted(object sender, UpdateMetaDataCompletedEventArgs e)
    {
        if (_updateMetaDataGuid_CheckAllFiles_Again)
        {
            updateMetaData();
        }
    }
Run Code Online (Sandbox Code Playgroud)

.net c#

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

设置默认键盘焦点加载UserControl

我有一个MVVM设置,主窗口包含一个ContentControl.我将其设置为特定的视图模型,然后映射到视图.视图是用户控件.我希望能够在加载时将默认键盘焦点设置为usercontrol(View)中的默认元素,这样最终只需使用向上,向下,向左,向右和输入即可驱动应用程序.我的一些失败尝试正在进行

FocusManager.FocusedElement="{Binding ElementName=DefaultElement}"
Run Code Online (Sandbox Code Playgroud)

在我的内容控制标签中.这设置了逻辑焦点,但不设置键盘焦点

我宁愿将解决方案保留在xaml中,如果可能的话,但是我已经尝试将以下内容放在代码中.

Keyboard.Focus(DefaultElement);  
Run Code Online (Sandbox Code Playgroud)

这不起作用,但如果我首先弹出一个消息框,它会.我有点困惑为什么.

MessageBox.Show(Keyboard.FocusedElement.ToString());
Keyboard.Focus(DefaultElement);
Run Code Online (Sandbox Code Playgroud)

编辑::::我刚把它放在我的用户控件的onloaded事件中.它似乎有效但任何人都可以看到任何可能在这个优先级别上出现的问题.IE动作永远不会运行的情况?

Dispatcher.BeginInvoke(
            DispatcherPriority.ContextIdle,
            new Action(delegate()
                {
                    Keyboard.Focus(DefaultElement);
                }));
Run Code Online (Sandbox Code Playgroud)

wpf

10
推荐指数
1
解决办法
8430
查看次数

在Windows中挂起/恢复时套接字会发生什么

我有一个使用BeginReceiveFrom和EndRecieveFrom监听套接字的ac#.net4应用程序.一切都按预期工作,直到我让机器进入睡眠然后恢复.

此时EndReceieveFrom执行并抛出异常(无法访问已处置的对象).看起来插座是在机器暂停时丢弃的,但我不知道如何处理.

我是否假设所有插座都已经处理好并从头开始重新创建它们?我在跟踪确切问题时遇到问题,因为远程调试也会在暂停/恢复时中断.

.net c# sockets c#-4.0

10
推荐指数
1
解决办法
2389
查看次数

安全DSA签名

有人可以放下我的想法,看看这个设置是否会验证文件来自我.这是多么安全的想法将是伟大的和任何潜在的攻击媒介.

  1. 使用DSACryptoServiceProvider创建公钥和私钥.
  2. 添加公钥作为应用程序资源
  3. 创建更新
  4. 使用私钥获取更新的dsa哈希值
  5. 发送哈希并更新到应用程序(假设这些可以被拦截/更改)
  6. 使用公钥验证哈希是否正确.
  7. 如果已验证应用更新

更新是一个exe并将被执行,所以我想确保如果有人替换或篡改它,它就不会被执行.

编辑:更新了第6点,因为公钥实际上并不生成哈希,只是验证它.我认为正是这部分我正在为安全问题而苦苦挣扎.

.net c# code-signing

9
推荐指数
1
解决办法
548
查看次数

可移植类库中的ConcurrentBag替代方案

我有一个应用程序,其中包含存储在a中的对象列表static ConcurrentBag.

UI有一个计时器,可以运行可以更新对象的方法ConcurrentBag.

只有一个线程(由计时器启动)将尝试更新这些对象.但是,此线程将枚举列表,然后更新项目.

同时,UI线程可以读取这些对象.

ConcurrentBag我正在做我想做的事情.所有业务逻辑都在一个单独的项目中,我现在需要将所有内容移植到iOS和Android.我正在使用Xamarin进行此操作,因此将业务逻辑转换为可移植类库.

虽然一切都我针对出现支持ConcurrentBag,当我试图访问它在PCL,System.Collections.Concurrent不可用.即使我只针对.net 4.5及以上+ windows存储应用程序(我用过ConcurrentBags的两个)

是否有其他替代方案ConcurrentBag或者我最好只为每个目标系统创建单独的项目?

.net c# multithreading portable-class-library

6
推荐指数
1
解决办法
1094
查看次数

DataContractSerializer中缺少数据成员的缺省值

使用DataContract中的以下两个数据成员然后使用DataContractSerializer,只有Name按预期序列化.我的问题是我反序列化文件."名称"被正确读取和加载,但由于"超时"不存在,我希望它保持默认的"TimeSpan.FromHours(12)".实际上发生了什么是DataContractSerializer分配一个值,但由于它没有分配值,它使用的时间跨度默认值为0.这个行为有什么问题吗?

private string _name;
    [DataMember(Name = "Name")]
    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name= value;
        }
    }

    private TimeSpan _timeout = TimeSpan.FromHours(12);
    public TimeSpan Timeout
    {
        get
        {
            return _timeout ;
        }
        set
        {
            _timeout = value;
        }
    }
Run Code Online (Sandbox Code Playgroud)

.net c# datacontractserializer

4
推荐指数
1
解决办法
2408
查看次数

更改程序集名称会破坏我的 XAML 设计器

当我在 VS2010 项目属性中更改程序集名称时,我的所有视图都在设计器中停止工作,并声明找不到我的 clr 命名空间。重建解决方案并不能解决这个问题,但我可以在更改程序集名称的情况下构建、运行和安装解决方案。我需要采取另一个步骤来解决这个问题吗?

.net c# wpf visual-studio-2010

3
推荐指数
1
解决办法
2603
查看次数

Upnp根设备与嵌入式设备

我目前正在将UPnP支持添加到应用程序中。它将充当媒体服务器,控制点和媒体渲染器。我的问题是,应将Media Server和Media Renderer实现为2个单独的设备还是一个包含1个嵌入式设备的根设备?

如果是后者,那么哪个是根设备?根和嵌入式设备的UUID是否相同,还是每个根/嵌入式设备唯一的UUID?

理想情况下,我只想宣传一台可以完成所有工作的设备,但是我不确定是否允许这样做。我查看了网络上的一些设备,但没有一个设备具有嵌入式设备,这使我想知道是否有一个单一的设备规范可以完成所有工作?
感谢您的指导。

upnp

3
推荐指数
1
解决办法
2862
查看次数

在Azure上托管现有的WCF服务

我有一个非常简单的wcf应用程序,由App.config,Iservice.cs,Service,cs和Service.svc组成.我只是将其发布到IIS并最终使用我的DLL的bin目录,web.config(从app.config中导出)和我的.svc文件,这是浏览访问服务的内容.

我想将此移至Azure,但我不确定最简单的方法.我在vs2010中创建了一个新的Windows Azure项目但我不能将我现有的项目添加为角色,而是我不得不创建一个新的Web角色或wcf服务角色.

任何人都可以告诉我我必须改变什么来托管我现有的项目?

.net wcf azure

0
推荐指数
1
解决办法
3276
查看次数