我有一个Windows窗体,在以下布局中显示几个DataGridViews :(
无法访问工作中的图像托管,所以请原谅ASCII艺术......)
???????????????????????????????????????????
???????????????????????????????????????????
?? ?? ??
??????????????? ??
|?????????????? ??
?? ?? ??
??????????????? ??
|?????????????? ??
?? ?? ??
???????????????????????????????????????????
???????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
不幸的是,当用户将表单调整为更高时,表单最终看起来像这样:
???????????????????????????????????????????
???????????????????????????????????????????
?? ?? ??
??????????????? ??
| | ||
| | ||
|?????????????? ??
?? ?? ??
??????????????? ??
| | ||
| | ||
|?????????????? ??
?? ?? ??
???????????????????????????????????????????
???????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
而不是这个:
???????????????????????????????????????????
???????????????????????????????????????????
?? ?? ??
?? ?? ??
??????????????? ??
|?????????????? ??
?? ?? ??
?? ?? ??
??????????????? ??
|?????????????? …
Run Code Online (Sandbox Code Playgroud) public void doprocess(TcpClient client)
{
MemoryStream ms = new MemoryStream();
Stream clStream = client.GetStream();
byte[] buffer_1 = new byte[8192];
int count = clStream.Read(buffer_1, 0, buffer_1.Length);
while (count > 0)
{
ms.Write(buffer_1, 0, count);
//the below line doesn't gives response and code hangs here
count = clStream.Read(buffer_1, 0, buffer_1.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以将一个流写入另一个流?我想用Stream
两次,这就是为什么我需要把它写到MemoryStream
.
我使用该ChannelFactory<T>
类型在WsHttpBinding
WCF Web服务中创建通道,该服务使用用户名/密码组合进行身份验证.虽然我使用自定义验证器进行身份验证,但我在创建具有不同凭据的频道时遇到了困难.
鉴于创建的开销ChannelFactory<T>
,我正在尝试缓存它的单个实例并共享它,以便在我的应用程序的生命周期内创建多个通道.不幸的是,似乎凭证直接与工厂绑定,并且在创建通道后无法更改.
换句话说,如果我试试这个:
factory.Credentials.UserName.UserName = "Bob";
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
factory.Credentials.UserName.UserName = "Alice"; // exception here
factory.Credentials.UserName.Password = "password";
var channel1 = factory.CreateChannel();
Run Code Online (Sandbox Code Playgroud)
我得到一个例外,告诉我该UserName
属性现在是只读的.
是否有可能在这里实现任何类型的缓存,或者我基本上必须缓存ChannelFactory
每个用户名的实例?
我正在使用TCP/IP套接字编程.我有一个浮点值存储在我的服务器代码中的变量ret_val中,我想发送给等待接收它的客户端.
我该怎么做?
我试图弄清楚如何多线程应用程序.我很难找到启动线程的入口点.
我尝试启动的主题是:plugin.FireOnCommand(this,newArgs);
...
PluginBase plugin = Plugins.GetPlugin(Commands.GetInternalName(command));
plugin.FireOnCommand(this, newArgs);
...
Run Code Online (Sandbox Code Playgroud)
FireOnCommand方法是:
public void FireOnCommand(BotShell bot, CommandArgs args)
Run Code Online (Sandbox Code Playgroud)
我没有运气使用ParameterizedThreadStart或ThreadStart,我似乎无法使语法正确.
编辑:试过两个
Thread newThread =
new Thread(new ParameterizedThreadStart(plugin.FireOnCommand(this, newArgs)));
Run Code Online (Sandbox Code Playgroud)
和
Thread newThread =
new Thread(new ThreadStart(plugin.FireOnCommand(this, newArgs)));
Run Code Online (Sandbox Code Playgroud) 我有这个简单的代码,记录将日志附加到文本文件:
public static void RecordToFile(string filename, Log log)
{
TextWriter textWriter = new StreamWriter(Constants.APP_PATH +
"\\" + filename, true);
textWriter.WriteLine(log.ToString());
textWriter.Close();
}
Run Code Online (Sandbox Code Playgroud)
这在Windows窗体应用程序中完美运行.但是,使用instsrv和srvany技巧,我将其作为Windows服务.该服务运行正常,访问数据库,执行查询和所有...除了这个StreamWriter.日志不会得到应有的更新.有什么想法吗?
我正在编写一个程序,它使用2个表单,主表单和配置表单,因此当用户单击toolstripmenu-> Preferences时,将显示Preferences表单,我希望它使用户只能使用一次一个首选项表单.
我用的时候:
Prefs preferencias = new Prefs;
private void preferenciasToolStripMenuItem_Click(object sender, EventArgs e)
{
preferencias.Show();
}
Run Code Online (Sandbox Code Playgroud)
它工作正常,但当我关闭Preferences表单并尝试打开一个新表单时程序崩溃.
当我使用时:
private void preferenciasToolStripMenuItem_Click(object sender, EventArgs e)
{
Prefs preferencias = new Prefs;
preferencias.Show();
}
Run Code Online (Sandbox Code Playgroud)
用户可以拥有多个"首选项"表单.
我能做什么?
提前致谢.
我正在试图找出处理单击按钮点击触发的后台工作人员的最佳方法.我用3个单选按钮和一个标签创建了一个非常简单的表单.每个单选按钮共享相同的事件radioButton_CheckedChanged.如果事件完成,那么我将标签更新为"完成".如果在事件完成之前单击另一个单选按钮,则将标签更新为已取消.下面是我在这个快速示例中编写的代码.尽管应用程序倾向于按预期运行,但我关注的是使用Application.DoEvents.我有什么替代方案.出于显而易见的原因,我在IsBusy时无法入睡.我是否认为这一切都错了,或者有更好的方法吗?谢谢,poco
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
if (rb.Checked)
{
if (backgroundWorker1.IsBusy)
{
backgroundWorker1.CancelAsync();
while (backgroundWorker1.IsBusy)
Application.DoEvents();
}
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 0; i < 100 && !worker.CancellationPending; ++i)
Thread.Sleep(1);
if (worker.CancellationPending)
{
e.Cancel = true;
return;
}
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
label1.Text = "Canceled";
else
label1.Text = "Complete";
}
Run Code Online (Sandbox Code Playgroud) 我有一个未分类的链表.为了对它进行排序,我想我会将值放入一个带有比较器的TreeSet中,然后将这些值作为新的链表返回.然而,它失败了.
比较:
public class SortSpeciesByCommonName implements Comparator<Species> {
/**
* a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.
*/
@Override
public int compare(Species arg0, Species arg1) {
return arg0.getName().compareTo(arg1.getName()); //arg.getName() is String
}
}
Run Code Online (Sandbox Code Playgroud)
排序功能:
public static LinkedList<Species> sortedAnimals(LinkedList<Species> animals) {
TreeSet<Species> sortedBreeds = new TreeSet<Species>(new SortSpeciesByCommonName());
sortedBreeds.addAll(animals);
return new LinkedList<Species>(sortedBreeds);
}
Run Code Online (Sandbox Code Playgroud)
测试值时,一切似乎仍处于插入顺序.
我正在开发一个似乎不起作用的搜索查询.完整的查询是:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[usp_Item_Search]
@Item_Num varchar(30) = NULL
,@Search_Type int = NULL
,@Vendor_Num varchar(10) = NULL
,@Search_User_ID int = NULL
,@StartDate smalldatetime = NULL
,@EndDate smalldatetime = NULL
AS
DECLARE @SQLstr as nvarchar(4000)
Set @SQLstr = 'SELECT RecID, Vendor_Num, Vendor_Name, InvoiceNum, Item_Num,
(SELECT CONVERT(VARCHAR(11), RecDate, 106) AS [DD MON YYYY]) As RecDate, NeedsUpdate, RecAddUserID FROM [tbl_ItemLog] '
IF (@Item_Num IS NOT NULL)
Begin
If @Search_Type = 0
BEGIN
Set @SQLstr = @SQLstr + …
Run Code Online (Sandbox Code Playgroud)