首先,我将解释一个简短的场景;
当来自某些设备的信号触发时,会将类型为Alarm的对象添加到队列中.每隔一段时间检查一次队列,对于队列中的每个Alarm,它会触发一个方法.
但是,我遇到的问题是,如果在遍历队列时将警报添加到队列中,则会在您使用它时发出错误说队列已更改.这里有一些代码来显示我的队列,只是假设警报不断插入其中;
public class AlarmQueueManager
{
public ConcurrentQueue<Alarm> alarmQueue = new ConcurrentQueue<Alarm>();
System.Timers.Timer timer;
public AlarmQueueManager()
{
timer = new System.Timers.Timer(1000);
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
DeQueueAlarm();
}
private void DeQueueAlarm()
{
try
{
foreach (Alarm alarm in alarmQueue)
{
SendAlarm(alarm);
alarmQueue.TryDequeue();
//having some trouble here with TryDequeue..
}
}
catch
{
}
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,我如何使这更多......线程安全?所以我不会遇到这些问题.也许是这样的事情,将队列复制到另一个队列,处理那个队列,然后将从原始队列处理的警报出列?
编辑:刚刚被告知并发队列,现在将检查出来
我决定快速浏览一下LINQ方面的内容,而不是仅仅使用一个直接的foreach循环,但我在使用它时遇到一些麻烦,主要是因为我相信数据类型.
到目前为止,我已经得到了这个;
var selectedSiteType = from sites in siteTypeList
where sites.SiteTypeID == temp
select sites;
Run Code Online (Sandbox Code Playgroud)
siteTypeList是SiteTypes的列表.我正试图找到一个特定的(我已经用变量"temp"谴责了.
然后,我如何将此选定的SiteType AS用作SiteType?当我尝试将"selectedSiteType"传递给另一个函数时,就像这样;
mSiteTypeSub.EditSitetype(selectedSiteType);
Run Code Online (Sandbox Code Playgroud)
注意:我尝试提供索引,就好像selectedSiteType是一个列表/数组,但是也没有用,我得到以下错误:
Argument 1: cannot convert from
'System.Collections.Generic.IEnumerable<DeviceManager_take_2.SiteType>' to
'DeviceManager_take_2.SiteType'
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?也许是某种演员?就像我说我是新手一样,我正在努力解决这个问题.机会是我有错误的整个概念和bingbangbosh我自己做了一个傻瓜!
提前干杯.
我在从MySQL数据库中读取blob时遇到了一些麻烦.我已经把它成功插入数据库,但似乎无法让它回读.我知道你们中的一些人可能在想"为什么他使用数据库存储图像的斑点,而不仅仅是文件路径/文件名",但我想要有灵活性,因为很多这些图像都会存储在服务器而不是本地服务器,这可以优化效率,并允许我根据需要将图像移动到本地.我已经按照(简短)教程编写了以下方法来接收blob;
public void getBlob(string query, string fileOut)
{
if (this.OpenConnection() == true)
{
MySqlCommand cmd = new MySqlCommand(query, mConnection);
//the index number to write bytes to
long CurrentIndex = 0;
//the number of bytes to store in the array
int BufferSize = 100;
//The Number of bytes returned from GetBytes() method
long BytesReturned;
//A byte array to hold the buffer
byte[] Blob = new byte[BufferSize];
//We set the CommandBehavior to SequentialAccess
//so we can use the SqlDataReader.GerBytes() method.
MySqlDataReader reader …Run Code Online (Sandbox Code Playgroud) 我是PHP的新手(有点),我已经浏览了一下,找不到任何可以满足我的问题的信息,所以这里是;
假设我声明了一个表单,包含2个字段和一个提交按钮;
<form name = "tryLogin" action = "logIn()" method = "post">
Username: <input type = "text" name = "username" placeholder = "username.."><br>
Password: <input type = "text" name = "password" placeholder = "password.."><br>
<input type = "submit" value = "Submit">
</form>
Run Code Online (Sandbox Code Playgroud)
在这里你可以看到我试图将动作设置为函数"logIn()",我已经将其包含在此文件的标题中.
在外部php文件中,我有以下内容;
function logIn()
{
if($_POST['username'] == "shane" && $_POST['password'] == "shane")
{
$_SESSION['loggedIn'] = '1';
$_SESSION['user'] = $_POST['username'];
}
header ("Location: /index.php");
}
function logOut()
{
$_SESSION['loggedIn'] = '0';
header ("Location: /index.php");
}
Run Code Online (Sandbox Code Playgroud)
(忽略任何"你不应该这样做,那样做",我只是在这里画一幅画).
所以基本上我希望表单提交给特定功能,这可能吗?我在这里做了一些根本错误的事吗?
我在调整Windows窗体中控件的大小和缩放时遇到麻烦。我设置了锚点,以便控件与表单保持比例,效果很好。但是,当我认为控件原点也会随着表单缩放而缩放和更改时,可能我期望过高,但事实并非如此,我发现控件重叠。这是一些截图;


有人知道我可以采取的解决此问题的方法吗?也许我需要将控件原点设置为可以缩放的动态绘图点,但是然后在缩放表单时还是仅在创建时重新绘制这些点?
编辑1:刚发现这个问题隐藏在互联网中,问题:锚定控件重叠,也许我需要实现这样的事情,即调整大小事件。
假设我有一个包含以下列的数据网格;
DataTable dataTable66 = new DataTable();
DataColumn colDescription = new DataColumn("userID");
dataTable66.Columns.Add(colDescription);
DataColumn colActive = new DataColumn("Username");
dataTable66.Columns.Add(colActive);
DataColumn colPass = new DataColumn("Password");
dataTable66.Columns.Add(colPass);
DataColumn colRole = new DataColumn("Role");
dataTable66.Columns.Add(colRole);
Run Code Online (Sandbox Code Playgroud)
我创建了一个数据网格,为了便于使用,我选择了一个用于密码和用户ID的列,但知道这是因为我想从最终用户隐藏这些细节,并将它们仅用于我的程序中的参考(例如更新)到数据库),我选择通过via隐藏这些列;
datagrid.Columns[0].Visible = false;
datagrid.Columns[2].Visible = false;
Run Code Online (Sandbox Code Playgroud)
就开发人员/数据库而言,这是否会产生任何安全风险?显然,密码本身只是密码的哈希,使用我选择加密它的任何方式,但是用户是否可以找到获取现在存储在DataTable/DataGrid中的这些细节的方法?
我正在尝试创建一个循环,为列表中的每个程序创建一个线程,但我在下面的代码上传递周长时得到"预期的方法名称"错误;
for (i = 0; i <= programs.Count; i++)
{
checkProcess check = new checkProcess();
// check.isRunning();
string filename = programs[i].Filename;
string filepath = programs[i].Filepath;
mWorkerThread = new Thread(new ThreadStart(check.isRunning(filename, filepath)));
mWorkerThread.Start();
}
Run Code Online (Sandbox Code Playgroud)
我读了一些代表,但似乎无法让他们在我的问题的背景下工作.任何帮助将非常感谢我应该朝哪个方向前进.
我在找出一种取消订阅的方法时遇到了一些麻烦,这种方法取消了我在预先制作的帮助文件中发现的一些匿名委托事件,这些文件有助于在运行时移动控件.我想取消订阅这些事件的原因是控件(在这种情况下是按钮)将再次被锁定而无法移动.这是helper类中的方法:
public static void Init(Control control)
{
Init(control, Direction.Any);
}
public static void Init(Control control, Direction direction)
{
Init(control, control, direction);
}
public static void Init(Control control, Control container, Direction direction)
{
bool Dragging = false;
Point DragStart = Point.Empty;
control.MouseDown += delegate(object sender, MouseEventArgs e)
{
Dragging = true;
DragStart = new Point(e.X, e.Y);
control.Capture = true;
};
control.MouseUp += delegate(object sender, MouseEventArgs e)
{
Dragging = false;
control.Capture = false;
};
control.MouseMove += delegate(object sender, MouseEventArgs e)
{ …Run Code Online (Sandbox Code Playgroud) 我正在尝试在NOW()和NOW之间过滤SELECT查询-间隔10分钟(?),但是我似乎无法使其正常工作,这给了我一些有关该主题的问题。
我已经在线浏览了一些文档,关于stackoverflow的很多问题,但是没有一个解决方案可以满足我的需求。查看TIMEDIFF和TIMESTAMPDIFF文档,我只看到它像这样使用;
SELECT TIMESTAMPDIFF(SECOND,'2007-12-30 12:01:01','2007-12-31 10:02:00');
Run Code Online (Sandbox Code Playgroud)
但是我不想只选择时差,我想在查询中将其用作WHERE子句,类似;
SELECT * FROM tableName WHERE (the time difference betweeen NOW() and the stored timestamp is less than x minutes);
Run Code Online (Sandbox Code Playgroud)
我是否需要将列设置为特定的数据类型?如何正确使用TIMEDIFF / TIMESTAMPDIFF,如果这些不是我应该使用的正确方法,那是什么?
我有几种不同的方法连接到远程主机,发送消息,获得回复,并使用这些信息.这个工作正常,直到我在我的连接类的同一个实例中使用两个方法.在我收到错误的示例中,我运行以下方法;
public string sendRequestAccountID(string siteID)
{
//build message
String response = String.Empty;
TcpClient client = new TcpClient();
client.Connect(detailsHere);
NetworkStream stream = client.GetStream();
StreamWriter writer = new StreamWriter(stream);
writer.AutoFlush = false;
writer.WriteLine(sb.ToString());
writer.Flush();
StreamReader reader = new StreamReader(stream);
List<XmlNode> nodeList = new List<XmlNode>();
byte[] responseBytes = new byte[4096];
int bytesRead = 0;
while (true)
{
bytesRead = stream.Read(responseBytes, 0, responseBytes.Length);
if (bytesRead > 0)
{
//handle message
}
if (bytesRead == 0)
{
stream.Flush();
stream.Close();
client.Close();
string finalResponse = stuffHereToSend;
return …Run Code Online (Sandbox Code Playgroud)