我正在创建一个简单的wpf桌面应用程序.UI只有一个按钮和.cs文件中的代码.
private void Button_Click_2(object sender, RoutedEventArgs e)
{
FunctionA();
}
public void FunctionA()
{
Task.Delay(5000).Start();
MessageBox.Show("Waiting Complete");
}
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的Task.Delay(5000).Start();是,线路投掷了InvalidOperationException:
可能不会在promise样式的任务上调用Start.
任何人都能帮助为什么会这样吗?
我有一个今天的小部件包含两件事:
UILabelUITableView在我的viewWillAppear设置标签是可见的,我的tableView被隐藏,我将标签文本设置为"正在加载".见下图.

然后我得到一个位置,当这个完成后,我调用另一个方法和
成功完成后,我有一个如下所示的tableView:
.
我现在的问题.
当我打开今天的小部件并点击时viewWillAppear,我并不总是设置我的标签,我得到的唯一结果就是这个
.
所以会发生的事情是我只能在tableView中显示我之前的一些结果.
偶尔会发生这种情况,似乎tableView冻结,我无法更新初始视图,隐藏tableView并显示标签.即使屏幕像这样冻结,一切都在运行,我设法更新tableView和视图.
唯一的问题是当我打开窗口小部件时,屏幕冻结如下:
有时而不是显示我的标签.它的大小原因,是因为我设置了preferredContentSize = CGSizeMake(0, 30).否则我打赌它会显示整个前一个tableView.
有关如何解决此问题的任何想法,以便在我点击时始终更新视图viewWillAppear?
更新
开始另一个赏金,看看是否有关于此问题的其他输入.
我正在学习C#,编码时出现了一个想法.是否可以以简单的方式自动将构造函数中的参数存储到字段中,而无需this.var = var在每个变量上写入以存储它们?
例:
class MyClass
{
int var1;
int var2;
int var3;
int var4;
public MyClass(int var1, int var2, int var3, int var4){
this.var1 = var1;
this.var2 = var2;
this.var3 = var3;
this.var4 = var4;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法避免编写this.varX = varX并将所有变量保存到字段中,如果名称相同?
我正在学习Spring Security,我很少有问题UserDetailsService:
1-何时loadUserByUsername实际调用或调用?认证后?每次登录只需一次?
2-登录后,Spring会将实际登录的用户放入httpSession吗?
3-填充集合的推荐方法<GrantedAuthority>是UserDetails什么?
UsernamePasswordAuthenticationFilter成功登录后实现另一个自定义过滤器,如populate?我正在开发一个UWP MVVM项目,并希望在用户交互停止一段特定时间时实现自动注销系统.
到现在为止,我DispatcherTimer每秒使用a 从200倒数.
TimerLeave = 200;
var _dispatcherTimer = new DispatcherTimer();
_dispatcherTimer.Tick += dispatcherTimer_Tick;
_dispatcherTimer.Interval = new TimeSpan(0, 0, 1);
_dispatcherTimer.Start();
Run Code Online (Sandbox Code Playgroud)
但是因为DispatcherTimer与UI链接而我正在构建MVVM应用程序,所以我正在寻找替代方案.
我搜索了一下,发现在计时器上运行后台任务.问题是这个计时器只能设置为每15分钟运行一次,这在我的情况下自动注销用户有点太长了.我找不到减少15分钟的解决方法.
所以我的问题是,是否有可能在UWP项目中设置一个没有链接到UI并且可以设置变量的计时器?
我有一堂课看起来很像这样:
object value;
Type type;
Run Code Online (Sandbox Code Playgroud)
当我创建对象时,我将类型设置为Object的类型.
如何将此类型与其他类型进行比较?
例如,如果类型是String:
type.Equals(String)
Run Code Online (Sandbox Code Playgroud)
和
type == String
Run Code Online (Sandbox Code Playgroud)
不起作用.
我们在asp.net c#project中使用Solrnet将文档索引到Solr中.我们要求Solr DIH不能使用,因此我们使用以下代码将产品分批索引到Solr:
decimal cycleCount = ProductCount / batchSize;
for (int i = 0; i <= Math.Round(cycleCount); i++)
{
var Products = Products(batchSize, languageId, storeId).ToList();
solrCustomWorker.Add(solrProducts);
solrCustomWorker.Commit();
}
Run Code Online (Sandbox Code Playgroud)
对于庞大的文档大小,完成整个过程需要花费大量时间(大部分时间需要几个小时),有时我们需要通过手动干预来中断此过程.
但是,我不确定如何在它完成之前停止这两个索引批处理循环.具有大批量文档的单个循环,需要几秒钟才能完成,然后提交.但考虑到巨大的没有.在执行完整索引时,文档需要几个小时,我们无法在两者之间停止此过程.
任何想法 - 如何在中间停止这个过程..我无法弄清楚应该在这里做什么?
请建议.
我们当前的项目由一个 ASP.NET 应用程序以及一些较小的控制台应用程序组成。我们使用 Microsoft 的Application Insights进行 ASP.NET 应用程序的应用程序管理。
现在,我们希望将Application Insights集成到控制台应用程序中,以便能够将日志记录集中到 Azure。
我们的遗留日志记录是通过Log4Net实现的。在控制台应用程序中配置Application Insights Core及其相应的 Log4Net Appender 后,我们能够按预期在 Azure 中查看日志条目。来自控制台应用程序的每条日志消息都会发送到 Azure,但我们附加附加对象的日志除外。例如,我们的日志消息的严重性级别为Error,其中包含异常对象作为第二个参数:
Log.Error("This looks like an error", ex);
Run Code Online (Sandbox Code Playgroud)
这些日志条目根本不会显示在 Azure 中。仅当将异常对象放入消息中时才会显示它们,例如:
Log.Error($"This looks like an error. Exception: {ex}");
Run Code Online (Sandbox Code Playgroud)
因此,Log4Net 中的异常对象似乎有大小限制,但实际消息却没有?如果是的话,这可以以任何方式配置吗?因为改变每个'Log.Error();' 在整个项目中不是一个选择。
我们的ApplicationInsights.config文件:
<?xml version="1.0" encoding="utf-8"?>
<ApplicationInsights xmlns="http://schemas.microsoft.com/ApplicationInsights/2013/Settings">
<InstrumentationKey>[Our key]</InstrumentationKey>
<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel, Microsoft.AI.ServerTelemetryChannel"/>
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.AdaptiveSamplingTelemetryProcessor, Microsoft.AI.ServerTelemetryChannel">
<MaxTelemetryItemsPerSecond>5</MaxTelemetryItemsPerSecond>
<ExcludedTypes>Trace;Exception</ExcludedTypes>
</Add>
</TelemetryProcessors>
</ApplicationInsights>
Run Code Online (Sandbox Code Playgroud)
编辑:
Log4Net配置:
<!-- ... -->
<!-- Configuration of logfile …Run Code Online (Sandbox Code Playgroud) 我正在构建一个与Web-Api通信的UWP应用程序.在某些点,我在URL中发送一个字符串到Web-Api,可以由用户操作.因此,字符串可以包含可以对Web-Api做恶事的字符.
例如:
这是我的UserController
[Route("api/user/{uid}")]
public User GetUser(string uid)
{
return userRepository.GetByUid(uid);
}
Run Code Online (Sandbox Code Playgroud)
为了这个例子,我们假设用户可以uid手动放入文本框中.现在,如果他投入
../vipuser
Run Code Online (Sandbox Code Playgroud)
他可以访问VipUserController.因为../一个hirachy了.
我搜索了一下,发现这篇SO文章推荐使用System.Web.UrlEncodeUnicode和System.Web.UrlDecode.
但由于UWP Apps不包含System.Web命名空间,我想知道是否有替代方法,我可以将其用于UWP-App?
在我正在编写的应用程序中,我有两个可能很大的数据集,我需要相互映射.一个是从Web服务返回的List,一个是DataTable.我需要为列表中的每个项目取ANSI(或ISO)编号,并找到包含该ANSI编号的DataTable行,然后对其进行处理.
由于DataTable.Select非常慢,而且我必须为List中的每个项目执行此操作,因此我尝试了更快的替代方案.请记住,DataTable对象没有数据库.所以我不能利用任何SQL功能或类似的东西.
我认为最快的方法可能是使用KeyValuePair(A:Ansi编号或I:Iso编号)创建一个字典并将其用作密钥.该值将是行的其余部分.创建该字典显然需要一点处理时间,但随后我可以利用字典的极快搜索时间来查找我需要的每一行,然后将这些行添加回表中.因此,在列表的foreach循环中,我只会使用字典而不是O(n)或DataTable.Select所具有的O(1)的复杂性.
令我惊讶的是,字典非常慢.直到我发现使用字符串(只是ANSI编号)而不是KeyValuePair才能明显地提高性能.我的谈话速度提高了数百倍.这有可能在地球上如何?这是我测试的方式:
我生成一个模拟Web服务输出的List.我使用键(字符串或KeyValuePair)和DataRow作为值创建基于该列表的字典.我浏览该列表的foreach循环,并在我的字典中搜索该列表中的每个项目,然后为返回的DataRow分配一个值.而已.
如果我使用KeyValuePair作为访问字典的密钥,则需要几秒钟来处理1,000个项目,如果我修改字典只将字符串作为密钥,则10,000个项目需要几毫秒.仅供参考:我设计了测试以便始终存在命中,因此始终可以找到所有键.
这是我正在测量时间的代码块:
foreach(ProductList.Products item in pList.Output.Products)
{
//KeyValuePair<string, string> kv = new KeyValuePair<string, string>("A", item.Ansi);
DataRow row = dict[item.Ansi];
for (int i = 0; i < 10; i++)
{
row["Material"] = item.Material + "a"; //Do stuff just for debugging
}
hits++;
}
Run Code Online (Sandbox Code Playgroud)
那么,如果我使用Dictionary(KeyValuePair,DataRow)而不是Dictionary(String,DataRow),那么地球上的执行时间可能会突然变长几百倍?