我正在尝试在c#中实现多线程.
基本思路是:
将会有很多线程进程调用一个函数,并且每个线程都不会按顺序调用它们.
我想限制最大线程数运行.
线程完成后,我想调用另一个线程,直到完成所有操作.
所以为了实现这一点,我使用了一个线程列表.对于每一秒,我检查列表是否已满,以及是否有任何线程完成其工作.
这是我的代码:
List<Thread> threadCompany = new List<Thread>();
List<Thread> fireThisGuy = new List<Thread>();
while (i < _finish) {
if (threadCompany.Count < _MAX_THREAD) {
Thread worker = new Thread(delegate() {
CallFunction(i);
});
threadCompany.Add(worker);
i++;
worker.Start();
}
Thread.Sleep(1000); //Wait for a while instead of keep calling if
foreach (Thread worker in threadCompany) {
if (!worker.IsAlive) {
fireThisGuy.Add(worker); //because threadCompany may not be
//modified in iteration.
}
}
foreach (Thread worker in fireThisGuy) {
threadCompany.Remove(worker);
}
fireThisGuy.Clear();
}
Run Code Online (Sandbox Code Playgroud)
这有效,但我不认为我在这里优雅高效,如何改进我的代码呢?
如果我创建一个新类,并在这个类中我放了一个这样的属性:
public class CurrentDirectory
{
private string cd;
public string CurrentDirectory
{
get
{
return cd;
}
set
{
cd = value;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我在程序中的某一点创建了这个类的新实例,如下所示:
CurrentDirectory myCurrentDirectory = New CurrentDirectory();
Run Code Online (Sandbox Code Playgroud)
然后我像这样设置一个值到CurrentDirectory:
myCurrentDirectory.CurrentDirectory = @"C:\MyFiles\Here";
Run Code Online (Sandbox Code Playgroud)
然后,在我的程序的另一个点上,我创建了另一个CurrentDirectory实例,并像这样"获取"CurrentDirectory的值:
CurrentDirectory myCurrentDirectory1 = new CurrentDirectory();
string putFilesHere = myCurrentDirectory1.CurrentDirectory;
Run Code Online (Sandbox Code Playgroud)
这会返回我之前设置的值,还是需要在同一个实例中"获取"并"设置"我的值?
谢谢
我有一个窗口应用程序,它试图连接一个MS Access文件,该文件已经准备好被另一个应用程序使用.当我停止该应用程序,然后我能够连接MS Access文件.否则会发生如下错误:
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "AccessDb" returned message "Cannot start your application.
The workgroup information file is missing or opened exclusively by another user.
有没有办法可以在只读模式下打开连接.我必须从该文件中读取数据.
谢谢.
我必须检查特定的证书。不幸的是我不知道如何实现这一点。我想要验证的证书是由我自己的 ca 签名的。我需要检查整个证书链。验证应在 C# 内完成。
亲切的问候,迈克尔
Ciao大家,我终于能够从.NET Framework 2.0切换到.NET Framework 4.0.
我正在尝试获得有关lambda表达式和LINQ的一些经验.
有可能翻译这个:
for (int cont = 0;cont < args.Length; cont++)
Console.WriteLine("#" + cont + " " + "<" + args + ">");
Run Code Online (Sandbox Code Playgroud)
单行lambda表达式,或者使用LINQ,甚至是其他一些我不知道的costruct?先感谢您.
我有一个正则表达式,我用来删除特定字符后的所有字符,分号.
var regex = new Regex(@";(.*)", RegexOptions.Singleline);
tb.Text = regex.Replace(tb.Text, "");
Run Code Online (Sandbox Code Playgroud)
它似乎工作正常,但有时它删除文本框的整个文本.例如,删除了所有此代码:
;fgkdfgdfgd
;dfgdfkghdfgdf
;sdgfsdfsdfsdf
;dfgdfgdfg
#dont remove this ;fgdfgdfg
Run Code Online (Sandbox Code Playgroud)
"#dont remove this"应保持原样,因为它不是在分号后,但它不是?我的正则表达式有问题吗?
我们的想法是删除或修剪文件中的所有注释.
我有一个Linq的案例,在加入两个表时,我得到10行数据.但我真的关心第一个,有没有办法限制它只返回1行?
这样的通用连接操作有没有?例如,有什么像FIRST OUTER JOIN,或者某种东西......?
WebRequest req = HttpWebRequest.Create("http://example.com/example");
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string str = sr.ReadToEnd();
XmlDocument doc = new XmlDocument();
doc.LoadXml(str);
XmlTextWriter writer = new XmlTextWriter("D://myGameSite//myGames.xml", null);
writer.Formatting = Formatting.Indented;
doc.Save(writer);**strong text**
Response.Write(doc);
Run Code Online (Sandbox Code Playgroud)
现在这段代码工作正常我的意思是它将XML文件保存在myGameSite的根目录中,文件名为myGames,但是当我尝试在浏览器中显示这个XML文件时,你可以在代码中看到,它只是清楚地显示了这个
System.Xml.XmlDocument
Run Code Online (Sandbox Code Playgroud)
我想在我的浏览器中显示这个XML文件以及标签,我的asp.net和.netframework的版本是2.0所以请我不能使用LINQ :(
我有一个ASP.NET c#web应用程序发布到我们的服务器.它由三个页面组成,每个页面都有一个表单,有点像3页登录.验证第三页的表单后,它会将用户发送到其他站点.这是一个小图,所以我可以更好地解释它:
NamePage ---> DateOfBirthPage ---> IDNumberPage ---> OtherSite
这在我们所有的开发测试和压力测试中都很有效.但是,在我们投入生产之后,有时当单击IDNumberPage上的"下一步"按钮时,用户会看到"此页面无法显示",并显示"诊断连接问题"按钮.当一个用户发生这种情况时,所有用户都会出现同样的问题(这意味着一旦发生这种情况,没有人可以完全进行身份验证)NamePage和DateOfBirthPage始终有效,当崩溃发生时,IDNumberPage链接不会更改,这表明崩溃发生在应用程序的这一侧,而不是在重定向到OtherSite之后.我关闭了友好的HTTP错误,但它没有在页面上显示任何错误.如果我们进入服务器并重新启动应用程序,它将再次运行.
令人沮丧的是,我们无法复制此错误,以了解它是如何/为何发生的.
一些值得注意的事情:
Response.Redirect(siteName, false)很抱歉,如果所有这些都非常模糊,但问题本身在躲避我们方面做得非常好.我们已经尝试用测试请求锤击服务器(许多一次,许多一段时间内等)以及登录/试图打破页面的不同组合,但无济于事.任何人都可以建议尝试诊断/修复/复制此问题吗?
编辑:IDNumberPage的代码隐藏中的单击函数导致问题:
{ SqlConnection dbconn = new SqlConnection(Application["dbconn"].ToString());
SqlCommand sqlValidate = dbconn.CreateCommand();
dbconn.Open();
sqlValidate.CommandText = "SELECT lastName, csn FROM Demographics WHERE lastName = '" + Session["lastName"].ToString() + "' " +
"AND dob = '" + Session["dobCheck"].ToString() + "' AND mrn = " + strMRN;
SqlDataReader results = sqlValidate.ExecuteReader();
if (results.HasRows)
{
string csn = "";
while (results.Read())
{
if …Run Code Online (Sandbox Code Playgroud) 我正在尝试从我的Web应用程序将数据从数据表插入到Excel文件中.按下按钮,数据表将被填充,并将其插入Excel文件中.问题是当正确插入数据并保存文件然后关闭它时,数据就会消失.它会在Excel文档关闭时发生.
这是我的代码:
public bool ExportDataTableToExcel(DataTable dt, string filepath)
{
Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
Excel.Range oRange;
try
{
// Start Excel and get Application object.
oXL = new Excel.Application();
// Set some properties
oXL.Visible = true;
oXL.DisplayAlerts = false;
// Get a new workbook.
oWB = oXL.Workbooks.Add(Missing.Value);
// Get the Active sheet
oSheet = (Excel.Worksheet)oWB.ActiveSheet;
oSheet.Name = "Data";
int rowCount = 1;
foreach (DataRow dr in dt.Rows)
{
rowCount += 1;
for (int i = 1; i < dt.Columns.Count …Run Code Online (Sandbox Code Playgroud)