我正在开发一个Windows窗体应用程序,它要求我调用一个单独的程序来执行任务.该程序是一个控制台应用程序,我需要将标准输出从控制台重定向到我的程序中的TextBox.
从我的应用程序执行程序没有问题,但我不知道如何将输出重定向到我的应用程序.我需要在程序使用事件运行时捕获输出.
在我的应用程序停止并且文本以随机间隔不断变化之前,控制台程序并不意味着停止运行.我试图做的只是从控制台挂钩输出以触发事件处理程序,然后可以使用它来更新TextBox.
我使用C#编写程序代码并使用.NET框架进行开发.原始应用程序不是.NET程序.
编辑:这是我正在尝试做的示例代码.在我的最终应用程序中,我将用代码替换Console.WriteLine来更新TextBox.我试图在我的事件处理程序中设置断点,甚至没有达到.
void Method()
{
var p = new Process();
var path = @"C:\ConsoleApp.exe";
p.StartInfo.FileName = path;
p.StartInfo.UseShellExecute = false;
p.OutputDataReceived += p_OutputDataReceived;
p.Start();
}
static void p_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
Console.WriteLine(">>> {0}", e.Data);
}
Run Code Online (Sandbox Code Playgroud) 我在MS技术方面的开发时间比我在此阶段要记住的时间长.当.NET到达现场时,我认为它们触及了头部,每次迭代和版本我认为他们的技术越来越强大,并期待每次发布.
但是,由于去年必须与WCF合作,我必须说我发现这项技术非常难以使用和理解.最初它非常吸引人但是当你开始深入了解它时,配置是一场噩梦,必须覆盖消息大小的行为,消息中包含的对象数量,安全模型的复杂性,出现故障时处理代理以及最终回到定义代码而不是XML中的接口.
它只是没有开箱即用,我认为应该.我们在测试自己时或者当我们的产品在现场时,我们发现了上述所有问题.
我确实理解这一切背后的基本原理,但肯定他们可以提出更简单的实现机制.
我想我要问的是,
OK伙计们,对于延迟回复感到抱歉,工作确实有一个令人讨厌的习惯,有时会妨碍:)
一些说明我对WCF的主要描述我想到了以下几个方面虽然它开箱即用,但你的左侧有一些重大的惊喜.如上所述,基本事物在被覆盖之前是受限制的
我知道世界在继续前进,我已经多次(最近22年来我一直在开发)并且正在积极地使用WCF,所以不要误解我的意思,我明白它的用途是什么它在哪里.
我认为应该有更简单的配置/部署选项,更容易的设置和更好的配置管理(SQL配置提供程序可能,而不仅仅是web.config/app.config文件).
我在C#中遇到了以下代码.
if(condition0) statement0;
else if(condition1) statement1;
else if(condition2) statement2;
else if(condition3) statement3;
...
else if(conditionN) statementN;
else lastStatement;
Run Code Online (Sandbox Code Playgroud)
我的一些同事告诉我,这是一个else if声明.但是,我确信它实际上是一个多层嵌套if-else语句.我知道没有分隔符{},一个if或多个语句中允许一个语句else.所以在这种情况下,我认为它将等同于以下代码.
if(condition0)
statement0;
else
if(condition1)
statement1;
else
if(condition2)
statement2;
else
if(condition3)
statement3;
else
...
Run Code Online (Sandbox Code Playgroud)
请注意,我改变的只是空白.这种缩进是有效的,因为当没有分隔符时,每个缩进else都会返回到最近的if语句.
任何人都可以澄清else if第一个例子中的格式是否被编译器if-else与第二个例子中的嵌套格式区别对待?
我知道我可以用map以下方式使用一个变量的函数:
var squarefunc = function(x) {
return x*x;
};
values = [1,2,3,4]
values.map(squarefunc) // returns [1,4,9,16]
Run Code Online (Sandbox Code Playgroud)
如何使用map以下功能:
var squarefuncwithadjustment = function(x, adjustment) {
return (x*x + adjustment);
}
Run Code Online (Sandbox Code Playgroud)
其中,我想adjustment在调用map时手动输入参数值,比如说adjustment=2,并且x从数组中获取值values.
我刚刚开始使用Entity框架,我对业务层中通常的类如何适应实体框架创建的实体感到困惑.
使用经典的ADO.NET时,我会有一个名为Customer的类,然后是另一个名为DALCustomer的类来处理数据库交互,在这个结构中,我会把代码放到计算,过滤和删除DAL的实例中.客户在Customer类中保存,更新和删除.
使用Entity Framework,如果您有一个名为Customer的表,Entity框架会创建一个名为Customer的实体,这就是我的困惑开始的地方,这个实体是否消除了业务层中对Customer的需求?因此,实质上通常在业务层中的所有字段和方法都在实体框架生成的实体中?或者,如果一个类仍然存在于名为CustomerBL的业务层中,那么它仍然包含完成计算,过滤所需的业务逻辑所需的字段和方法,并且仍然需要声明处理数据访问的EF DAL实例?
如果应该有一个业务类,在这种情况下是CustomerBL,另外还有一个问题,如果客户实体中创建的字段在CustomerBL中重新创建,或者应该在CustomerBL中声明Customer实体的实例,那么就会有不需要在2个位置声明字段?
我正在尝试在c#中编写一个Web服务客户端,其Web服务是Java Axis 1.4.Axis服务需要HTTP标头中的Authorization:Basic Base64EncodedToken标头值.我找不到一种方法来在visual studio.net中以不同的方式设置这个头文件,就像普通的WSDL生成引用一样,也不是WSE3.0
我不能使用WCF,因为项目是使用.net 2.0开发的.
有没有办法做到这一点?
我正在为公司开发一个新的应用程序.该应用程序必须与iPhone交换数据.
公司服务器端使用.NET框架.
例如:特定CustomerNumber的类"Customer"(名称,地址等)应首先从服务器下载到iphone,存储在本地,然后上传回应用更改(并将其提供给其他人).并发应该不是问题(至少在这个时候......)
无论如何,我必须开发服务器端(webservice或其他)和iPhone应用程序.
我可以自由地确定最佳方法(这是应用程序"第一",因此它将成为未来的"标准").
那么,你建议我什么?
使用SOAP Web服务(XML解析等..)或用户JSON?(它看起来更轻......)我是否清楚如何使用SOAP"上传"数据(很长时间来编写xml肥皂信封......我会避免)但是如何使用JSON做同样的事情呢?
应用程序需要使用日期值(例如:last_visit_date等..)Json中的日期怎么样?
我正在使用Path.Combine:
Path.Combine("test1/test2", "test3\\test4");
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
test1/test2\test3\test4
Run Code Online (Sandbox Code Playgroud)
注意正斜杠如何不转换为反斜杠.我知道我可以做string.Replace改变它,但是有更好的方法吗?
为什么我不能预先分配hashset<T>?
有时我可能会添加很多元素,我想消除调整大小.
静态变量是否在用户会话中保留其值?
我有一个ASP.NET Web应用程序,我有两个按钮.一个用于设置静态变量值,另一个用于显示静态变量值.
namespace WebApplication1
{
public partial class WebForm1 : System.Web.UI.Page
{
public static int customerID;
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ButtonSetCustomerID_Click(object sender, EventArgs e)
{
customerID = Convert.ToInt32(TextBox1.Text);
}
protected void ButtonGetCustomerID_Click(object sender, EventArgs e)
{
Label1.Text = Convert.ToString(customerID);
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这适用于单用户环境,但如果有两个用户同时从两台计算机登录,会发生什么情况,用户1将值设置为100,然后用户2将值设置为200.之后用户1调用"获取值"按钮.他认为什么是价值?
c# ×8
.net ×3
web-services ×2
asp.net ×1
axis ×1
console ×1
hashset ×1
if-statement ×1
iphone ×1
javascript ×1
json ×1
objective-c ×1
soap ×1
static ×1
textbox ×1
wcf ×1
winforms ×1
wsdl ×1