在我的应用程序中,我发现需要有无限的 while 循环,主要是为了连续执行一些重复的操作,除非发生另一个事件,所以我正在做的是
while(chkFlag)
{
//do something here which takes around 30 seconds
}
Run Code Online (Sandbox Code Playgroud)
然后在其他事件中说按下按钮来停止我做的循环
chkFlag = false;
Run Code Online (Sandbox Code Playgroud)
现在这可以完成工作,但问题是这不会立即停止循环,因为仅在循环完全执行后才检查 chkFlag。那么任何人都可以告诉我如何根据事件立即退出循环。
在我的项目中,这是一种tcp服务器,我需要跟踪在全局范围内使用的很多对象.我沉迷于哈希表,目前我在我的项目中使用了10个哈希表,它将存储不同类型的对象.
我的问题是,这没关系吗?我知道它是一个非常庞大的数据结构但它使我的工作变得非常容易,而不是去寻找其他替代方案.例如,我有许多文本框,我需要跟踪.所以我把它们全部放在一个哈希表中并按照我喜欢的方式使用它们.
在处理大型多线程应用程序时,这种方法是否是可接受且正常的编程方法.
我有一个winform应用程序,其中我有很多需要连续监视的控件.例如,有一个按钮,只有在禁用其他两个按钮时才应启用它,并且它们在不同的实例中禁用.所以我现在正在做的是使用一个线程来监视连续循环中的另外两个按钮,例如
while(true)
{
if(btn.enabled==false and btn1.enabled==false)
{
bt3.enabled==true
}
}
Run Code Online (Sandbox Code Playgroud)
虽然它做了我需要的东西但对我来说似乎不对.考虑到我必须生成以管理我的控件的线程数量,它也非常昂贵,有些控件需要检查五到六个不同的东西才能执行操作,并且线程似乎是唯一可行的方法.
请告诉我是否有其他方法可以做到这一点
我只是想清楚ajax页面的javascript应该放在哪里.例如在我的页面中,一旦页面加载我正在发出一个ajax请求并检索20条记录,每条记录包含大约10个带有一些按钮和动作的div他们自己的.
现在对于新加载的元素的ajax和客户端js动作,js必须放在父函数的回调中,以使它们正常工作但是这变得很乱,因为我有大约15个操作用于新加载的控件.
将所有代码与返回的ajax页面放在一起很容易.
如果这是我从初始请求返回的那个
<div id="something">
<input type="button" id="btn1">
<input type="button" id="btn2">
<input type="button" id="btn3">
</div>
Run Code Online (Sandbox Code Playgroud)
如果我为这些元素嵌入相应的js jquery代码以及返回的结果,它的工作正常.
$("#btn1").click(blah)
$("#btn2").click(blah)
$("#btn3").click(blah)
Run Code Online (Sandbox Code Playgroud)
问题是,这样做是否可以.
如果我有一个像70 80或2500这样的int的秒数,我怎么把它显示为格式的时间hh:mm:ss使用最简单的方法.我知道我可以为它做一个单独的方法,但我想检查是否有任何已经可用的lib功能.这是我创建的方法,它的工作原理.
private void MakeTime(int seconds)
{
int min = 0;
int sec = seconds;
int hrs = 0;
if (seconds > 59)
{
min = seconds / 60;
sec = seconds % 60;
}
if (min > 59)
{
hrs = min / 60;
min = min % 60;
}
string a = string.Format("{0:00}:{1:00}:{2:00}", hrs, min, sec);
}
Run Code Online (Sandbox Code Playgroud)
这是我现在使用的功能.它有效,但我仍然觉得单线呼叫会做到这一点.任何人都知道吗?
我在我的应用程序中使用jquery UI,并且在我的页面中使用时jquery UI的所有元素都显得很安静.那就是它们看起来比页面的其他部分更大.我放在jquery UI元素中的普通元素的大小也在增长.
例如,我在手风琴中有几个文本框和文本标签,它们比UI元素的原始大小更大.
我不确定是什么原因造成的.
我有一个函数,可以使用表的内容填充数据表.但它在WHERE子句中显示了一个恼人的无效列名错误.
public static DataTable GetRequests(string empid)
{
DataTable dt = new DataTable();
string strConnection = ConfigurationManager.AppSettings["connStr"];
using (SqlConnection connection = new SqlConnection(strConnection))
{
connection.Open();
SqlCommand sqlcmd = new SqlCommand();
SqlDataAdapter sAdap = new SqlDataAdapter();
sqlcmd.Connection = connection;
sqlcmd.CommandType = System.Data.CommandType.Text;
sqlcmd.CommandText = "Select * from requests Where emp_id=P001";
sAdap.SelectCommand = sqlcmd;
sAdap.Fill(dt);
}
return dt;
}
Run Code Online (Sandbox Code Playgroud)
现在,我得到了错误
sAdap.fill
Run Code Online (Sandbox Code Playgroud)
而错误是
invalid column name P001
Run Code Online (Sandbox Code Playgroud)
我很难过.有什么想法我为什么要面对这个问题?
我有一个多线程的应用程序,并基于propertychange我想做一些操作,所以我为它创建了一个事件处理程序并从一个线程更改了属性,但仍然在事件触发时,我尝试访问表单元素事件处理程序方法visual studio抱怨跨线程访问已完成.我不明白为什么它被视为交叉线程.这是我的代码,
public delegate void AppStateChangedEventHandler(int st);
public event AppStateChangedEventHandler AppStateChanged;
private int appState;
public int AppState
{
get { return this.appState; }
set
{
this.appState = value;
if (this.AppStateChanged != null)
{
this.AppStateChanged(value);
}
}
}
public void MainForm_AppStateChanged(int val)
{
if (val == 1)
{
totDwn.Text = "00:00:00";
totAct.Text = "00:00:00";
}
else if (val == 0)
{
tt.Reset();
sw.Reset();
}
}
Run Code Online (Sandbox Code Playgroud)
在我添加的initializecomponent方法里面
this.AppStateChanged += new AppStateChangedEventHandler(this.MainForm_AppStateChanged);
Run Code Online (Sandbox Code Playgroud)
从线程内部我将appstate属性更改为
this.AppState = 1;
Run Code Online (Sandbox Code Playgroud)
现在有两个问题
1)第一个也是重要的是vs抱怨即使我正在从事件处理程序访问GUI元素,也正在执行交叉线程操作.(我知道如何使用所需的调用和委托来处理它,但我只需要知道为什么它是像这样)
2)VS警告AppStateChanged事件不是Windows.form的一部分.
第一个问题是什么真的让我烦恼?对此有任何想法.
我有一个mysql架构,如
table 1
id field
1 field 1
2 field 2
3 field 3
Run Code Online (Sandbox Code Playgroud)
表2
id tbl1id somefield
1 1 field1
2 1 field1
3 2 field1
4 2 field1
5 1 field1
6 2 field1
7 2 field1
8 3 field1
9 1 field1
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个查询来从表2中获取"tbl1id",其中包含多于"3"行,在这种情况下,它是1和2,在表2中有超过3行.