我有一个winforms应用程序,我可以在两个公司(数据库)之间进行选择,并访问他们的文章/项目来阻止或取消阻止它们。我是通过SAP B1 SDK完成的。该功能有效,它按预期完成所有操作。 "问题"用户不喜欢它的速度有多快(用户,我是对的吗?)并且他们要求我慢一点并添加一些视觉功能(进度条,锁定/解锁图片,其他标签),以便他们能够使用它们。知道哪个文章被阻止/解锁。
这是我锁定/解锁文章的功能:
private void items()
{
string[] lines = textBox1.Lines;
for (int i = 0; i <= lines.GetUpperBound(0); i++)
{
oItem = ((SAPbobsCOM.Items)(oCompany.GetBusinessObject(SAPbobsCOM.BoObjectTypes.oItems)));
oItem.GetByKey(lines[i]);
if (comboBox1.Text == "Lock")
{
oItem.Frozen = BoYesNoEnum.tYES;
}
else if (comboBox1.Text == "Unlock")
{
oItem.Frozen = BoYesNoEnum.tNO;
}
lRetCode = oItem.Update();
if (lRetCode != 0)
{
oCompany.GetLastError(out lErrCode, out sErrMsg);
MessageBox.Show(lErrCode + " " + sErrMsg + " item: " + lines[i]);
}
}
}
什么可能是实现这一目标的最佳和正确方法?我尝试使用Thread.Sleep
,但经过几次尝试失败后,我无法找到插入代码行的位置,我在之前,之后和之后尝试过,但我没有成功。任何想法/建议将不胜感激。
答案 0 :(得分:1)
这些声明正在锁定和取消闪烁
oItem.Frozen = BoYesNoEnum.tYES;
和oItem.Frozen = BoYesNoEnum.tNO;
。所以你不能在字面上&#34;介于&#34;之间。执行那些陈述。您所能做的就是在WaitCursor
之前启用Thread.Sleep
,然后让冻结/解冻。这不会阻止锁定和解锁快速进行,但是由于WaitCursor
效果,用户会觉得该过程需要一些时间。
总结:Waitcursor启用了1秒 - 用于视觉效果,我们欺骗用户有些事情发生在幕后,但实际上没有任何事情发生,除了更改游标!
您可以Thread.Sleep
使用WaitCursor
,例如:
if (comboBox1.Text == "Lock")
{
Cursor.Current = Cursors.WaitCursor;
Thread.Sleep(1000);
oItem.Frozen = BoYesNoEnum.tYES;
Cursor.Current = Cursors.Default;
}
else if (comboBox1.Text == "Unlock")
{
Cursor.Current = Cursors.WaitCursor;
Thread.Sleep(1000);
oItem.Frozen = BoYesNoEnum.tNO;
Cursor.Current = Cursors.Default;
}