我试图使用async/wait .NET功能进行Oracle查询.结果集非常大,需要大约5-10秒才能恢复.Window_Loaded挂起了UI线程,本质上我想使用async/wait在后台进行查询,然后使用结果更新数据视图.
这是Oracle驱动程序问题还是代码错误?例如,这是同步而不是异步完成的事情吗?我正在使用Oracle.ManagedDataAccessOracle可以从Oracle网站获得的最新信息.
async Task<DataTable> AccessOracleAsync()
{
DataTable dt;
using(OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString))
using (OracleCommand cmd = new OracleCommand(@"SELECT * FROM myTbl", conn))
{
await conn.OpenAsync();
using (var reader = await cmd.ExecuteReaderAsync())
{
dt = new DataTable();
dt.Load(reader);
}
}
return dt;
}
private async void Window_Loaded(object sender, RoutedEventArgs e)
{
await AccessOracleAsync();
}
Run Code Online (Sandbox Code Playgroud)
我试过这个,它仍然在用户界面陷入僵局:
async Task<DataView> AccessOracleAsync()
{
DataTable dt;
using (OracleConnection conn = new OracleConnection(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString))
using (OracleCommand cmd = new OracleCommand(@"SELECT * FROM myTbl", conn)) …Run Code Online (Sandbox Code Playgroud) 我有,
MyList包含字段的对象的列表:
string A;
string B;
Run Code Online (Sandbox Code Playgroud)
从概念上讲,这类似于带有列A,B的两列SQL表.
我正在尝试创建一个linq表达式,它将在这样一个概念表上生成此T-SQL的三列结果集:
SELECT A, B, COUNT(B)
FROM T1
GROUP BY A, B
Run Code Online (Sandbox Code Playgroud)
也就是说,如果我有一个表,如:
A B
----------
x g
x g
x g
x s
y g
y g
Run Code Online (Sandbox Code Playgroud)
我希望:
A B COUNT(B)
-------------------------
x g 3
x s 1
y g 2
Run Code Online (Sandbox Code Playgroud)
我最大的努力是这样的:
var result = from MyObjs in MyList
group MyObjs by new { MyObjs.A, MyObjs.B } into g
select new { g.Key.A, g.Key.B, g.Key.B.Count() }
Run Code Online (Sandbox Code Playgroud)
但是计数似乎返回B的总数而不是每个多列组的B的数量.怎么解决这个问题?
在C#中,如果我有一个List<MyObj>where MyObj是一个带有重写ToString()方法的自定义类,MyObj那么List 中的每个对象都可以很容易地转换为字符串.
我怎样才能加入这个List<MyObj>有一个分隔符,例如管道(|)合并为一个字符串.
所以,如果我有3个MyObj对象,其ToString方法将分别产生AAA,BBB,CCC.我会创建一个单独的字符串:AAA | BBB | CCC.
对于更简单类型的列表,例如List<string>我执行此操作简单如下:String.Join("|",myList.ToArray());.有没有办法可以做类似的事情?或者我是否被迫迭代对象列表并使用字符串生成器将每个对象的ToString一起追加到列表中?
我有以下问题使用CSS来设置一些dl和dt元素的样式.我更喜欢使用与IE6/IE7和现代浏览器兼容的非常基本的CSS.我试图获得一个效果,对我来说应该很容易实现.
这是我正在使用的初始源代码的精简版本,试图解决这个问题:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<style type="text/css">
.terms dl {
float: left;
padding-left: 0px;
}
.terms dt, .terms dd {
text-align: center;
margin: 0px;
float: left;
}
.terms dt {
border: solid blue 1px;
clear: left;
}
.terms dd {
border: solid red 1px;
margin-right: 40px;
margin-left: 40px;
}
</style>
</head>
<body>
<div class="terms">
<h1>Terms</h1>
<dl>
<dt>Term 1:</dt>
<dd>Very Long definition for this term here</dd>
<dt>Term 2:</dt>
<dd>Definition for term</dd>
<dt>Term 3 with longer …Run Code Online (Sandbox Code Playgroud) 我有一个MySQL表,看起来像这样:

用于创建结构的SQL是:
CREATE TABLE `status` (
`id` INT(11) NOT NULL,
`responseCode` INT(3) NOT NULL DEFAULT '503',
`lastUpdate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
它存储了一个独特的id,responseCode和lastUpdate.这responseCode是HTTP请求响应代码:404,500,503,200等.
我有一个URL对应每个id我发出HTTP请求的URL,并在此表中记录我发出请求和收到响应的时间.
该脚本对status表进行此查询:
SELECT id FROM status WHERE lastUpdate < 'XXXX' OR
(responseCode != 200 AND responseCode != 404)
ORDER BY id DESC LIMIT 100
Run Code Online (Sandbox Code Playgroud)
哪个XXXX日期我决定不论响应代码如何都需要刷新那个早于该日期的日期.此外,如果我没有得到200或404不管上次lastUpdate约会,我想重新尝试HTTP请求.我LIMIT到100,因为我一次只运行100,然后我让它睡了一会儿再做100个,依此类推.
无论如何,一切都很好,但我想做的是提前填充表格,如下所示:
(1, …Run Code Online (Sandbox Code Playgroud) 我有一个简单的控制台应用程序,如下所示:
private static StringBuilder sb = new StringBuilder();
private static HttpClient client = new HttpClient();
private static async Task<HttpStatusCode> AccessTheWebAsync()
{
HttpResponseMessage response = await client.GetAsync("http://www.google.com").ConfigureAwait(false);
return response.StatusCode;
}
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
sw.Start();
List<Task> tasks = new List<Task>();
for (int i = 0; i < 10; i++)
tasks.Add(AccessTheWebAsync());
Task.WaitAll(tasks.ToArray());
foreach (Task<HttpStatusCode> t in tasks)
sb.Append((int)t.Result).Append(Environment.NewLine);
Console.WriteLine(sb.ToString());
sw.Stop();
Console.WriteLine("Run Completed, Time elapsed: {0}", sw.Elapsed);
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我发起10个异步Web请求,并在请求完成时收集响应代码并列出它们.
原因是我发现你可以改变App.config:
<?xml version="1.0" …Run Code Online (Sandbox Code Playgroud) .net async-await .net-4.5 dotnet-httpclient visual-studio-2012
是否有一种快速的方法可以加载到每个文件(您具有读访问权限)的完全限定路径,从提供的根目录开始,比如说string[]?
我看到了System.IO.Directory.GetFiles,但在你被允许输入之前你必须提供一个过滤器SearchOption.AllDirectories,所以我尝试了:
string[] directoryList = Directory.GetFiles(RootPath, "*.*",
SearchOption.AllDirectories);
Run Code Online (Sandbox Code Playgroud)
RootPath我的有效根目录在哪里.这似乎工作正常,除了它指向一个29GB的大目录/文件结构和几十万个文件时,它挂了我的Windows窗体应用程序很长一段时间.
所以我考虑通过一个线程进行线程化,BackgroundWorker以便我的GUI看起来没有被锁定,但是我不确定我是如何报告这样的事情的进展ProgressBar因为它只是一个声明正在进行加载而我已经没有关于前期文件总数或已经处理过的数量的信息等.
我正在尝试做一些我认为应该相当简单的事情,但我已经花了太多时间在它上面并且我尝试了几种不同的方法,我研究但无济于事.
基本上,我有一个巨大的名字列表,其中包含来自UTF8字符集的"特殊"字符.
我的最终目标是读取每个名称,然后使用URL中的该名称作为GET变量发出HTTP请求.
我的第一个目标是从文件中读取一个名称,并将其标准化以确认我可以在创建字符串并发出所有HTTP请求之前正确读写UTF8.
test1.txt我制作的文件只包含以下内容:
OWNAGE
然后我用这个C#代码读入文件.我设置StreamReader编码和Console.OutputEncodingto UTF8.
static void Main(string[] args)
{
Console.OutputEncoding = System.Text.Encoding.UTF8;
using (StreamReader reader = new StreamReader("test1.txt",System.Text.Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,我得到了这样的输出:

预期输出与原始文件内容完全相同.
如果我甚至不能做一个简单的读/写UTF8字符串任务,我怎么能确定我要构建的用于发出HTTP请求的字符串是否正确?
我加载了一个小型控制台应用程序,它只是读取并打印传递给程序的第一个命令行参数到控制台.
我想将换行符传递给我试过的参数:
prog.exe \n --> outputs \n
prog.exe "sfs \n sfff" --> outputs sfs \n sfff
prog.exe "ff \\n ff" --> outputs ff \\n ff
prog .exe "ff \\\\n ff" --> outputs ff \\\\n ff
Run Code Online (Sandbox Code Playgroud)
是否有其他逃避我想使用?或者是否有一些函数我必须调用args [0]来处理转义字符才能将其输出到控制台?
为了澄清,我正在尝试将一个字符串传递给我的程序,该程序中包含换行符.输出到控制台被用作测试.我可以轻松插入调试中断行并检查变量的内容.
我不确定我理解这个的后勤.基本上我想在网络博客上做一个简单的列表,看起来像:
1. item1
a. item2
2. item3
a. item4
b. item5
3. item6
Run Code Online (Sandbox Code Playgroud)
依此类推,基本上是一个以数字方式排序的主列表,每个主要项目下的子列表都是lower-alpha有序的.
我通过使用此HTML标记实现了此效果:
<ol>
<li>item1</li>
<ol>
<li>item2</li>
</ol>
<li>item3</li>
<ol>
<li>item4</li>
<li>item5</li>
</ol>
<li>item6</li>
</ol>
Run Code Online (Sandbox Code Playgroud)
使用这个小CSS规则:
ol ol { list-style-type: lower-alpha; } /* sub ordered lists */
Run Code Online (Sandbox Code Playgroud)
根据w3c验证器,我遇到的这个问题是:
在这种情况下,元素ol不允许作为元素ol的子元素.
我认为这个问题应该有一个非常简单的解决方案,我无法找到一个,而且我不确定我是否遵循为什么ol不能成为一个孩子ol.