有没有直接的方法(通过使用cmdlet或.NET类)来获取给定路径中子文件夹中文件的相对路径?
例如,当前文件夹是C:\MyScript并没有所谓的子文件夹Data与文件Test.txt,所以我想看到Data\Test.txt的,而不是C:\MyScript\Data\Test.txt
我正在阅读Albahari关于线程的优秀电子书,并遇到以下情况他提到"一个线程可以以嵌套(可重入)方式重复锁定同一个对象"
lock (locker)
lock (locker)
lock (locker)
{
// Do something...
}
Run Code Online (Sandbox Code Playgroud)
以及
static readonly object _locker = new object();
static void Main()
{
lock (_locker)
{
AnotherMethod();
// We still have the lock - because locks are reentrant.
}
}
static void AnotherMethod()
{
lock (_locker) { Console.WriteLine ("Another method"); }
}
Run Code Online (Sandbox Code Playgroud)
根据解释,任何线程都会阻塞第一个(最外面的)锁,并且只有在外部锁退出后才会解锁.
他说"当一个方法在一个锁中调用另一个方法时,嵌套锁定很有用"
为什么这有用?你什么时候需要这样做,它解决了什么问题?
嗨,我注意到以下代码片段的一些奇怪的行为
function test
{
$LASTEXITCODE = $null
ping asdfs
Write-Host "Last exitcode: $LASTEXITCODE"
}
test
Write-Host "Last exitcode: $LASTEXITCODE"
Run Code Online (Sandbox Code Playgroud)
这个输出是
Ping request could not find host asdfs. Please check the name and try again.
Last exitcode:
Last exitcode: 1
Run Code Online (Sandbox Code Playgroud)
为什么$ LASTEXITCODE没有在test()函数中设置?
这是我现在遇到的一个问题的概括,当我从一个函数中调用Win32 .exe并且$ LASTEXITCODE没有返回我在函数中期望的值时
我似乎无法找到任何文章或链接到如何做到这一点似乎是一个明显的问题(例如,当你没有源代码或想要使用不是为MEF编写的现有类型时)
我有一个带有以下事件触发器的UserControl:
<UserControl x:Class="TestApp.Views.MyUserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding OnLoadedCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
它是通过UserControl的构造函数设置的(请忽略ServiceLocator ..这只是一个快速原型):
public MyUserControl()
{
InitializeComponent();
DataContext = ServiceLocator.Current.GetInstance<DirectorySearchViewModel>();
}
Run Code Online (Sandbox Code Playgroud)
在我的视图模型中,我有以下内容:
public ICommand OnLoadedCommand { get; private set; }
public MyUserControl()
{
OnLoadedCommand = new DelegateCommand(OnLoaded);
}
public void OnLoaded()
{
}
Run Code Online (Sandbox Code Playgroud)
OnLoaded永远不会被调用.如果我将EventName更改为..MouseDown,那么它可以工作,但它只适用于Loaded
很确定这是一个愚蠢的错误(发誓我过去曾做过这么多次),但现在似乎无法解决这个问题
假设有一个处理每个请求的HttpHandler,并假设每个HttpHandler为每个请求计算一个中间结果,并且可能希望通过HttpContext.Items集合将其传递给页面处理程序,例如通过Server.Transfer或Server.Execute.
当每个请求到达相同的.aspx页面时,每个请求都会有一个单独的HttpContext.Items ["sameKey"]副本吗?
我担心HttpContext.Current本身就是一个静态属性
嗨,我正在努力与以下 - 我假设我有以下目录结构C:\ Temp\Test1和C:\ Temp\Test2
我想要做的是递归地将C:\ Temp\Test1的子内容复制到C:\ Temp\Test2而不复制实际的文件夹C:\ Temp\Test1 ..right现在如果我使用命令
Copy-Item C:\Temp\Test1 C:\Temp\Test2 -Recurse
Run Code Online (Sandbox Code Playgroud)
将导致C:\ Temp\Test2\Test1并没有参数组合似乎可以缓解这个问题
同样,当我希望删除C:\ Temp\Test2中的所有子内容时,我希望只删除子内容而不是实际文件夹,例如
Remove-Item C:\Temp\Test2\ -Recurse
Run Code Online (Sandbox Code Playgroud)
正在删除\ Test2文件夹.我尝试了很多参数变化 - 我怎样才能完成我想做的事情?
在C#2010中阅读Pro WPF时,作者写道:
"你可以为每个属性引发一个事件.在这种情况下,事件必须具有名称PropertyNameChanged(例如,UnitCostChanged).当你更改属性时,你可以触发事件."
有人可以确认此功能有效吗?我正在尝试并且无法重现这种行为(我想知道这是否有效,然后我可以尝试使用System.Reflection.Emit来创建动态类型)
编辑:我应该澄清这里的重点是实现更改通知而不实现INotifyPropertyChanged,因为这是本书的主张
这是我正在测试的POCO:
public class Employee
{
private string _FirstName;
public string FirstName
{
get
{
return _FirstName;
}
set
{
if (_FirstName != value)
{
_FirstName = value;
if (FirstNameChanged != null)
{
FirstNameChanged(this, new PropertyChangedEventArgs("FirstName"));
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我将它绑定到DataGrid并在后台有一个计时器每隔几秒随机更新一次FirstName属性,但DataGrid永远不会触发
<DataGrid x:Name="dgEmployees" ItemsSource="{Binding ElementName=mainWindow, Path=MyEmployees}">
<DataGrid.Columns>
<DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}" />
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
FirstNameChanged事件始终为null(我认为绑定引擎可能会在根据命名约定检测到它时自动订阅它).MyEmployees只是一个ObservableCollection
有人可以确认作者提到的这个功能是否确实有效,如果我犯了错误?
编辑:为了任何认为我错误解释文本的人的利益:
"您可以使用三种方法来解决此问题:
您可以使用在第4章中学习的语法使Product类中的每个属性成为依赖项属性.(在这种情况下,您的类必须从DependencyObject派生.)虽然这种方法让WPF为您完成工作(这很好) ),它在窗口中具有视觉外观的元素类中最有意义.对于像Product这样的数据类,这不是最自然的方法.
您可以为每个房产举办活动.在这种情况下,事件必须具有名称PropertyNameChanged(例如,UnitCostChanged).您可以在更改属性时触发事件.
您可以实现System.ComponentModel.INotifyPropertyChanged接口,该接口需要名为PropertyChanged的单个事件.然后,只要属性发生更改,就必须引发PropertyChanged事件,并通过将属性名称作为字符串提供来指示哪个属性已更改.当属性发生变化时,仍然由您来提升此事件,但您不需要为每个属性定义单独的事件."
关于.NET中的多线程的一些新手问题,我认为这将有助于强化我想要吸收的一些概念 - 我已经阅读了几种多线程材料(包括Albahari电子书),但我觉得我只需要对一些问题进行一些确认帮助推动这些概念回家
锁定范围保护共享的代码区域 - 假设有一个线程正在执行一个方法,该方法在循环中递增一个简单的整数变量x - 但是这不会保护其他地方的代码,这些代码也可能会改变变量x,例如在另一个线程上的另一个方法中...
由于这是可能影响同一变量的两个不同的代码区域,我们是否通过为变量x周围的两个锁定范围使用相同的锁定变量锁定两个代码区域来解决这个问题?如果您使用不同的锁定变量锁定了两个代码区域,这不能保护变量的正确性吗?
为了进一步说明这个例子,使用相同的锁变量,如果由于某种原因,一个方法中的代码进入某个无限循环并且永远不会放弃锁变量会发生什么 - 另一个方法中的第二个代码区如何检测到这个?
锁变量的选择如何影响锁的行为?我已经阅读了很多关于这个主题的帖子,但似乎永远无法找到明确的答案 - 在某些情况下,人们明确地使用了一个专门用于此目的的对象变量,其他时候人们使用锁定(这个),最后有时候我已经看到人们使用类型对象.
锁变量的不同选择如何影响锁的行为/范围以及使用哪一个有意义?
感谢任何有助于为我强化这些概念的启发式方法 - 谢谢!
以下是为我返回NULL,任何想法为什么?
MultiBinding collectionRange = new MultiBinding();
collectionRange.Bindings.Add(new Binding("CurrentPosition") { Source = View });
collectionRange.Bindings.Add(new Binding("Count") { Source = View });
collectionRange.StringFormat = "{0} of {1}";
tbFooter.SetBinding(TextBlock.TextProperty, collectionRange);
var x = tbFooter.GetBindingExpression(TextBlock.TextProperty);
Run Code Online (Sandbox Code Playgroud)
MultiBinding很好 - 属性是有效的,它在UI上呈现..我似乎无法抓取绑定表达式(x始终为NULL)
我使用这种方法错了吗?