告诉我如何在同一个解决方案(Console_Tasks)中的另一个项目(Second-Task)中使用一个项目(First_Task)的方法(TheNumEnter)?
我对 C# 非常了解,最近学习了 C,现在正在学习 C++,是否可以将 C++ 视为具有 C# 面向对象编程能力的 C?我正在尝试阅读 Bjarne Stroustrup,感觉 C++ 是 Sharp 和 C# 的混合体,并带有修改后的语法。我错了吗?或者除了语法之外,C++ 和 C# 在 OOP 方面还有其他区别吗?是否值得详细了解 C++ 或仅研究语法的简要描述?显然,各种语言结构在最低层次的实现有所不同,但它们的本质会改变吗?如果是,那么程度如何?之所以会产生这个想法,是因为在阅读一本书的时候,会有一种读100遍的感觉,很困难,很慢。
使用 DI 为控制台编写了一个小应用程序。应用程序从 DI 容器中变异并公开单例状态。
程序.cs
var serviceCollection = new ServiceCollection();
serviceCollection.AddSingleton<ISingletonTest, SingletonTest>();
serviceCollection.AddSingleton<App>();
var serviceProvider = serviceCollection.BuildServiceProvider();
var app = serviceProvider?.GetService<App>();
using (var scope = serviceProvider?.CreateScope())
{
app?.RUN();
}
我/SingletonTest.cs
public interface ISingletonTest
{
public int COUNT { get; }
public void increase();
}
class SingletonTest : ISingletonTest
{
private int _count = 0;
public int COUNT { get => _count; }
public void increase()
{
_count++;
}
}
应用程序
internal class App
{
private readonly ISingletonTest _singletonTest;
public App(ISingletonTest singletonTest)
{
_singletonTest = singletonTest;
}
public void RUN()
{
List<Thread> lst = new List<Thread>();
for (int i = 0; i < 100; i++)
{
lst.Add(new Thread(() =>
{
_singletonTest.increase();
Console.WriteLine("In thread:" + Environment.CurrentManagedThreadId + " value of _singletonTest.COUNT = " + _singletonTest.COUNT);
}));
}
foreach (var item in lst)
{
item.Start();
}
Console.ReadLine();
}
}
程序输出如下
我想了解为什么会发生这种情况,因为 ServiceCollection 使用基于 IList 的线程安全集合。而事实上数据显示的顺序可能是乱的,但肯定不能有重复。是的!输出有时正常,但有时读数会重复几次。帮助我理解 DI 容器中的线程安全问题。
如果我没有做任何改变,我应该完成交易吗?
await using var transaction = await context.Database.BeginTransactionAsync();
var items = await context.Items.OrderBy(i => i.Id).Take(100).ToListAsync();
if (items.Count == 0)
{
await transaction.CommitAsync();
return false;
}
...
如果我只是保留该方法,会有什么危害吗?或者我应该使用await transaction.CommitAsync();
?
任务是在一次交易中接收最多 100 个项目,更改它们,将它们保存到另一个位置,并删除从源收到的项目。
如果有 0 个项目,则不执行任何操作。
大家好!我最近开始学习 Avalonia,在处理 TreeView 节点扩展事件时遇到了问题。他有一个活动TreeViewItem.Expanded="OnExpanded"
和处理程序
private void OnExpanded(object sender, RoutedEventArgs e)
{
//...
}
但是这个处理程序没有e.OriginalSource(扩展节点的TreeViewItem)。我确实需要知道哪个结被打开了。
作为节点我使用以下类:
public class Node {
public Name {get; set;} // К примеру название директории
public FullName {get; set;} // Полный путь к директории
public ObservableCollection<Node> SubNodes {get; set;} // Подузлы
}
向 Avalonia 和 MVVM 专家提问:在 MVVM 中解决这个问题是否可以接受?或者这是否需要通过绑定来完成?