小编Adi*_*ter的帖子

C#中'volatile'关键字的目的是什么?

volatileC#中关键字的用途是什么?

我需要在哪里使用此关键字?

我看到以下声明,但我无法理解为什么volatile需要这里?

internal volatile string UserName; 
Run Code Online (Sandbox Code Playgroud)

c# multithreading volatile

17
推荐指数
3
解决办法
3809
查看次数

async w/await与同步调用有何不同?

我在http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx?cs-save-lang=1&cs-lang=csharp上阅读有关异步函数调用的内容.

在第一个例子中,他们这样做,我得到:

Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");

// You can do work here that doesn't rely on the string from GetStringAsync.
DoIndependentWork();

string urlContents = await getStringTask;
Run Code Online (Sandbox Code Playgroud)

但他们解释说,如果没有任何工作要做,你可以这样做:

string urlContents = await client.GetStringAsync();
Run Code Online (Sandbox Code Playgroud)

根据我的理解,await关键字将暂停代码流,直到函数返回.那么这有什么不同:

string urlContents = client.GetString();
Run Code Online (Sandbox Code Playgroud)

.net c# asynchronous async-await c#-5.0

17
推荐指数
2
解决办法
5086
查看次数

错误模板显示在其他控件上方,应隐藏它

我正在尝试使用该IDataErrorInfo接口在我的WPF应用程序中实现验证,并且我遇到了一个不太理想的情况.

我有这个模板,当控件无法验证时使用

<ControlTemplate x:Key="errorTemplate">
    <DockPanel LastChildFill="true">
        <Border Background="Red" DockPanel.Dock="Right" Margin="5,0,0,0" Width="20" Height="20" CornerRadius="10"
                                    ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
            <TextBlock Text="!" VerticalAlignment="Center" HorizontalAlignment="Center" FontWeight="Bold" Foreground="White" />
        </Border>
        <AdornedElementPlaceholder Name="customAdorner" VerticalAlignment="Center" >
            <Border BorderBrush="red" BorderThickness="1" />
        </AdornedElementPlaceholder>
    </DockPanel>
</ControlTemplate>
Run Code Online (Sandbox Code Playgroud)

一切顺利,直到我尝试在验证失败的控件上方显示某些内容,例如在其上方显示停靠项:

正常显示 隐藏部分控件时显示

如何避免这种情况并使我的错误模板显示在停靠项目下方,因为它应该如此?

编辑

我发现我可以TextBox用一个AdornerDecorator来修复它,但我真的不想为TextBox我的应用程序中的每个控件执行此操作.有没有办法用一种Style或其他方式设置它?

编辑2

我可能会更改默认的TextBoxControlTemplate以包含一个AdornerDecorator,但我不太热衷于更改任何WPF的默认控件模板.欢迎任何其他建议.

.net validation wpf xaml idataerrorinfo

16
推荐指数
1
解决办法
5771
查看次数

Async-await Task.Run vs HttpClient.GetAsync

我是c#5异步功能的新手.我试图理解这两个实现之间的区别:

实施1:

private void Start()
{
    foreach(var url in urls)
    {
        ParseHtml(url);
    }
}

private async void ParseHtml(string url)
{
    var query = BuildQuery(url); //BuildQuery is some helper method
    var html = await DownloadHtml(query);
    //...
    MyType parsedItem = ParseHtml(html);
    SaveTypeToDB(parsedItem);
}

private async Task<string> DownloadHtml(string query)
{
    using (var client = new HttpClient())
    try
    {
        var response = await client.GetAsync(query);
        return (await response.Content.ReadAsAsync<string>());
    }
    catch (Exception ex)
    {
        Logger.Error(msg, ex);
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

实施2:

private void DoLoop()
{
    foreach(var …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous task-parallel-library async-await c#-5.0

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

由于私钥过滤器,使用signtool进行代码签名失败

在尝试签署由我工作的公司创建的一些安装程序时,我遇到了一个错误,我无法解决.我使用相同的证书,已成功使用另一台机器(Win7)以相同的方式签署准相同的安装程序.无论如何,在运行CruiseControl.net的Windows Server 2008上,我尝试使用signtool.exe对安装程序进行签名,但它失败并出现以下错误:

The following certificates were considered:
    Issued to: <our company>
    Issued by: <some ca>
    Expires:   <is valid>
    SHA1 hash: <...>

    Issued to: <...>
    Issued by: <...>
    Expires:   <...>
    SHA1 hash: <...>

After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Subject Name filter, 1 certs were left.
After Private Key filter, 0 certs were left.
SignTool Error: No certificates were found that met all the given criteria.
Run Code Online (Sandbox Code Playgroud)

我尝试将证书安装到不同的证书库,尝试使用不同版本的signtool.exe并尝试直接使用.cer文件,但没有区别.我在所有情况下都收到了上述错误.我尝试了以下命令行命令

signtool.exe sign /debug /n …
Run Code Online (Sandbox Code Playgroud)

windows code-signing certificate signtool private-key

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

如何使用任务有条不紊地运行代码

我有一个负责检索资源的课程,这些课程也会对它们进行快速访问.该类公开了一种用于检索资源的异步方法:

public Task<object> GetResourceAsync(string resourceName)
{
    return Task.Factory.StartNew<object>(() =>
    {
        // look in cache

        // if not found, get from disk

        // return resource
    });
}
Run Code Online (Sandbox Code Playgroud)

然后客户端代码如下所示:

myResourceProvider.GetResourceAsync("myResource")
    .ContinueWith<object>(t => Console.WriteLine("Got resource " + t.Result.ToString()));
Run Code Online (Sandbox Code Playgroud)

这样,始终使用后台线程.但是,如果在缓存中找到对象,我不希望代码异步运行.如果在缓存中找到它,我想立即返回资源而不必使用另一个线程.

谢谢.

.net c# multithreading .net-4.0 task-parallel-library

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

将多个ObservableCollections绑定到One ObservableCollection

有一堆,ObservableCollection<MeClass> Result并要求将它们全部组合到另一个,ObservableCollection<MeClass> AllResults所以我可以在一个显示它listview.

只是不确定如何将它们合二为一.

我创建了一个新类,将它们组合在一起但不确定在我获得列表后它们将如何更新...所以不确定要采取哪个方向.

我知道INotifyPropertyChanged我只是不确定如何将它们全部组合并随着一切变化而不断更新.

.net c# wpf observablecollection inotifypropertychanged

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

WPF拖放到DataGrid

我一直在寻找互联网的高低,但找不到一些可以帮助我的例子.

我正在用wpf开发一个应用程序,在其中我用了一个DataGrid; 每个细胞都有一个DataTemplate带有图像的马赛克风格; 在网格的一侧,我有一些瓷砖在网格上使用.

我能够拖动瓷砖但不能将它们放在网格上,因为我找不到制作掉落的单元格.有没有办法从拖拽事件中获取单元格位置?

谢谢

wpf datagrid drag-and-drop

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

MEF保留对NonShared IDisposable部件的引用,不允许GC收集它们

我在MEF的部件生命周期中遇到了一些问题,导致我的Prism应用程序中出现内存泄漏.

我的应用程序导出视图和视图模型,并将PartCreationPolicy其设置为CreationPolicy.NonShared.视图和视图模型分别继承ViewBaseViewModelBase实现IDisposable.

现在,由于我的部件实现了IDisposable,因此容器会保留对它们的引用,这会导致它们不被垃圾收集器释放.根据MEF关于部件寿命的文档,这是设计的:

除非满足下列条件之一,否则容器将不会保留对其创建的零件的引用:

  • 该部分标记为 Shared
  • 该部分实现 IDisposable
  • 一个或多个导入配置为允许重构

那怎么能让MEF不参考这些部分呢?是否有一个属性我可以用来让MEF知道我不希望它保留对我的部分的引用,即使它实现了IDisposable

上述文章中讨论的两种策略对我来说似乎都不是很好的解决方案:

  • ReleaseExport需要一个Export对象作为参数,我不知道如何提供.我有我的观点的实例,但是我无法知道用于创建视图的合同是什么.如果有一个重载ReleaseExport可以接收容器创建的任何对象,那将会很棒.
  • 使用子容器似乎也不是一个自然的选择.

任何帮助将不胜感激.

.net memory-leaks prism mef object-lifetime

12
推荐指数
2
解决办法
7021
查看次数

模仿Windows用户

我正在使用代码来模拟用户帐户以访问文件共享.

public class Impersonator :
    IDisposable
{
    #region Public methods.
    // ------------------------------------------------------------------

    /// <summary>
    /// Constructor. Starts the impersonation with the given credentials.
    /// Please note that the account that instantiates the Impersonator class
    /// needs to have the 'Act as part of operating system' privilege set.
    /// </summary>
    /// <param name="userName">The name of the user to act as.</param>
    /// <param name="domainName">The domain name of the user to act as.</param>
    /// <param name="password">The password of the user to act as.</param> …
Run Code Online (Sandbox Code Playgroud)

c# windows impersonation

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