小编Yah*_*hia的帖子

使用List <Thread>管理线程

我正在尝试在c#中实现多线程.

基本思路是:

  1. 将会有很多线程进程调用一个函数,并且每个线程都不会按顺序调用它们.

  2. 我想限制最大线程数运行.

  3. 线程完成后,我想调用另一个线程,直到完成所有操作.

所以为了实现这一点,我使用了一个线程列表.对于每一秒,我检查列表是否已满,以及是否有任何线程完成其工作.

这是我的代码:

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)

这有效,但我不认为我在这里优雅高效,如何改进我的代码呢?

c# multithreading

2
推荐指数
1
解决办法
2万
查看次数

财产是否具有价值

如果我创建一个新类,并在这个类中我放了一个这样的属性:

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)

这会返回我之前设置的值,还是需要在同一个实例中"获取"并"设置"我的值?

谢谢

c# properties class

2
推荐指数
1
解决办法
1297
查看次数

使用相同的MS Acess文件在另一个应用程序中连接MS Access

我有一个窗口应用程序,它试图连接一个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.

有没有办法可以在只读模式下打开连接.我必须从该文件中读取数据.

谢谢.

c# ado.net ms-access

2
推荐指数
1
解决办法
8252
查看次数

WCF 中的证书验证

我必须检查特定的证书。不幸的是我不知道如何实现这一点。我想要验证的证书是由我自己的 ca 签名的。我需要检查整个证书链。验证应在 C# 内完成。

亲切的问候,迈克尔

c# wcf certificate x509

2
推荐指数
1
解决办法
3241
查看次数

很容易lambda表达

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?先感谢您.

.net c# linq lambda

1
推荐指数
1
解决办法
356
查看次数

正则表达式删除某个字符后的所有内容(评论)

我有一个正则表达式,我用来删除特定字符后的所有字符,分号.

        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"应保持原样,因为它不是在分号后,但它不是?我的正则表达式有问题吗?

我们的想法是删除或修剪文件中的所有注释.

c# regex character line

1
推荐指数
1
解决办法
3790
查看次数

进行连接,只返回第一行

我有一个Linq的案例,在加入两个表时,我得到10行数据.但我真的关心第一个,有没有办法限制它只返回1行?

这样的通用连接操作有没有?例如,有什么像FIRST OUTER JOIN,或者某种东西......?

c# sql linq

1
推荐指数
1
解决办法
170
查看次数

如何显示XML?

    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 :(

c# xml asp.net

1
推荐指数
1
解决办法
2万
查看次数

按钮有时会重定向到"此页面无法显示"

我有一个ASP.NET c#web应用程序发布到我们的服务器.它由三个页面组成,每个页面都有一个表单,有点像3页登录.验证第三页的表单后,它会将用户发送到其他站点.这是一个小图,所以我可以更好地解释它:

NamePage ---> DateOfBirthPage ---> IDNumberPage ---> OtherSite

这在我们所有的开发测试和压力测试中都很有效.但是,在我们投入生产之后,有时当单击IDNumberPage上的"下一步"按钮时,用户会看到"此页面无法显示",并显示"诊断连接问题"按钮.当一个用户发生这种情况时,所有用户都会出现同样的问题(这意味着一旦发生这种情况,没有人可以完全进行身份验证)NamePage和DateOfBirthPage始终有效,当崩溃发生时,IDNumberPage链接不会更改,这表明崩溃发生在应用程序的这一侧,而不是在重定向到OtherSite之后.我关闭了友好的HTTP错误,但它没有在页面上显示任何错误.如果我们进入服务器并重新启动应用程序,它将再次运行.

令人沮丧的是,我们无法复制此错误,以了解它是如何/为何发生的.

一些值得注意的事情:

  • 每个页面在MS SQL Server数据库上使用一个查询
  • 每个页面最多传递4个Session变量(只有包含在前一页上输入到文本框表单中的内容的小字符串)
  • 单击最后一个"下一步"按钮时,会话将被放弃.
  • 在重定向之前,所有结果集/连接/命令都将关闭.
  • 重定向使用重载版本 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)

c# sql-server asp.net session response.redirect

1
推荐指数
1
解决办法
1352
查看次数

无法使用asp.NET保存Excel文件

我正在尝试从我的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)

.net c# asp.net

1
推荐指数
1
解决办法
522
查看次数